java对象与内存

      java的内存管理包括两个方面,内存分配与内存回收,内存分配指的是JVM在建立java对象时,在堆中所分配的内存。内存回收指的是java对象在失去引用,变成垃圾时,java的内存回收机制将内存进行回收。java

     因为java的内存回收机制是由一条后台线程执行的,也是很是耗能的,若是肆无忌惮的建立java对象,让java的内存回收机制进行回收,这样作有两个坏处性能

     1.不断分配的内存使系统中的可用内存愈来愈少,从而下降程序的运行性能线程

     2.大量已分配内存的java对象的回收使得垃圾回收的分担加剧,下降程序的运行性能。对象

—.内存分生命周期

      java的变量大致可分为局部变量和实例变量内存

      局部变量可分为以下三种内存管理

      1,方法内的形参,方法局部变量,代码块中的变量。方法局部变量中参数必须显示的进行初始化,且生命周期随方法的消失而消亡。代码块中的变量也必须显示的进行初始化,且随着代码块的消失而消亡。他们都储存在方法的栈内存中。编译

     成员变量后台

     在类体内定义的变量属于成员变量,若是成员变量使用static进行修饰,那么该变量属于类自己,称为类变量。若是该成员变量没有用static进行修饰,属于对象的实例,称为实例变量。同一个JVM只能有一个Class对象,所以同一个JVM的类变量只需同一块内存。而同一个Class对象可用创造出n多个对象的实例,所以每建立出一个对象的实例,就须要创造出一块内存。变量

      (1)实例变量

         实例变量的初始化时机有三种

         1. 定义时进行初始化

         2.代码块中进行初始化(与1的地位相等)

         3.构造器中进行初始化(地位低于上两位)

       (2)类变量

         1.定义时进行初始化

         2.静态代码块中进行初始化

    1. 当变量的编译类型与运行时类型不一样时,经过变量访问它引用的对象的实例变量时,该实例变量的值由声明该变量的类型决定。但经过变量调用它引用的对象的实例方法时,该方法行为将有它实际所引用的对象来决定。

    2.若是父类的构造器中调用了被子类重写的方法,且经过子类构造器来建立子类对象,调用了这个父类构造器(无论是显示调用仍是隐示调用)就会致使子类的重写方法访问不到子类的实例变量值得情形。 

相关文章
相关标签/搜索