java内存管理

今天看了一些关于java内存管理的书。

1、内存管理分为内存分配和内存回收,java虚拟机有自动回收机制,但并不意味着我们在程序中可以肆无忌惮的创建对象,1:是内存减少,降低程序性能;2:大量已分配内存进行垃圾回收,家中垃圾回收负担,降低程序运行性能。

2、类变量和实例变量

类变量属于类,jvm在初始化类时对类变量进行初始化,只运行一次。
class Test{
static int seg=100;     //1、定义变量时初始化  
static{
	name="nihao";   //2、在静态代码中初始化
}
}


类变量初始化分为两步:1、先为类中所有类变量分配内存空间(赋为默认值:int(0),对象(null))2、再依次对类变量进行初始化。

实例变量属于对象,

class Test{
int seg=100;            //1、定义变量时初始化  
{
	name="nihao";   //2、在非静态代码块中初始化
}
public Test(){
int age=12;     //3、构造函数中初始化
}
}
在编译时,首先是定义变量,赋值初始化是由构造函数完成的。


3、java的继承:

class Base{

int count=1;

Dispaly(){

}

}

class Derived  extends Base{

int count=3;

Dispaly(){

}

}

当 Base base= new Base();

Derived derived =new Derived();

Base bd=new Derived();//此时bd.count=1;    dbd.Display()  -->调用子类的方法。

Derived db1=base;        //db1.count=1; db1.Display()-->调用父类的方法。

Base bd1=derived;        //XXX汇报异常,父类不能转换成子类,

总结:子类重写父类的方法,再由子类引用指向父类实例;

父类引用不能引用子类的实例,因为子类的很多方法可能父类并不存在,这种类型转换是不存在的。


当变量的编译类型和运行类型不同时,当调用实例变量时,为引用变量的类型;当调用实例方法时,为所引用的实例对象对的方法。(两者处理不同)

java内存管理真是一门学问,以后要慢慢学习~~~~







原文地址:https://www.cnblogs.com/yeemi/p/7470164.html