1.数组
数组属于引用类型;
数组对象在堆中存储,数组变量属于引用类型。存储数组对象的地址信息,指向数组的对象;
数组的元素可以看成数组对象的成员变量(只不过类型全部相同);
数组的元素可以是任何类型,包括引用类型。
2.对象的内存管理
JVM 把内存分为: 堆、栈、方法区三个区域,用于存储不同数据。
堆:堆里存储着使用new关键字创建的对象;
栈:这部分空间所存储的是在方法中声明的所有局部变量(包括方法参数变量)
方法区: 方法区存放的是类的信息,Java程序运行时,首先会通过类加载器载入字节码文件信息,经过解析后把其装入方法区。
类的各种信息(方法的定义)都在方法区存储。
当类的信息被加载到方法区时,除了类的类型信息之外,同时类内的方法定义也被加载到方法区
类在实例化对象时,多个对象拥有在堆中的空间,但所有的实例对象共用在方法区中的一份方法定义
局部变量的生命周期:1.一个运行的程序从开始到结束会有多次方法的调用,JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间就被称为该方法的栈帧
2.一个栈帧对应着一个正在调用的方法,栈帧中存储了该方法的参数,局部变量等数据,等某一个方法调用结束后,其对应的栈帧将被回收,局部变量也被回收
成员变量的生命周期:从对象在堆中创建开始到对象从堆中被回收结束
局部变量和成员变量的区别和联系:
局部变量:1.定义在方法中;2.局部变量没有默认值,必须自行设定初始值;3.方法调用结束,从栈中清除
成员变量:1.定义在类中,方法外;2.有默认值,可以不显示地初始化;3.类被实例化(创建对象)后在堆中创建,对象被回收时,成员变量失效。
访问对象需要依靠引用变量;当一个对象没有引用对象指向时,这个
对象就会被视为废弃的对象,就属于被回收的范围,该对象中的所有成员变量也被回收
垃圾回收机制-GC:是JVM自带的一个后台线程(自动运行),用于回收没有任何引用指向的对象。
GC 线程判断对象是否可以回收的依据就是看此对象是否有引用向。因此当我们确定不再使用某对象时
,应该将其引用置为null
但有时候,GC并不一定会及时去回收无用的对象,在这种情况下,我们可以调用System.gc();方法,
此方法用于建议JVM马上调度GC线程回收资源。(具体的实现步骤取决于不同的JVM系统)
内存泄漏:当对象使用完依然有引用变量指向,而导致无法及时回收释放内存
严重的内存泄漏会因为过多的内存占用,而导致程序的崩溃;
网友评论