JVM内存管理
包括方法区、栈、堆。
注:java程序,运行过程中报内存不足,指的是JVM内存不足,需给JVM扩大内存
1、方法区
1)用于存储 .class 字节码文件(包括方法)
2)java程序运行时,首先会通过类装载器载入类文件中的字节码信息,经过解析后将其装入方法区
3)方法只有一份,通过 this 来区分具体是哪个在调用
2、栈
1)栈用于存放程序运行当中的局部变量(包括参数)
2)一个运行的java程序从开始到结束会有多次方法的调用。JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为方法的栈帧
3)一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据
4)当某一个方法调用完成后,其对应的栈帧将被清除
5)局部变量的生命周期:调用方法时存在栈中,方法调用结束时与栈帧一并消失
3、堆
1)JVM会在其内存空间开辟一个称为“堆”的存储空间,用于存储所有new出来的对象(包括成员变量)
2)成员变量的生命周期:创建(new)对象时存在堆中,对象被GC回收时一并消失
3)垃圾:没有任何引用所指向的对象;垃圾回收器(GC)不定时到堆中查看,看到垃圾则自动回收;回收过程是透明的,并不是一看到垃圾就马上回收
4)若想让它快一些收垃圾,可以调用 System.gc()
注:java中有个GC垃圾回收器,会自动垃圾回收;c++需自己回收垃圾
5)内存泄漏:不再使用的对象没有被及时的回收
建议:当对象不再使用时应及时将引用设置为null