009 Java-内存管理

蹲街弑〆低调 提交于 2019-11-26 14:10:37

对象内存管理

  • 编译好的Java程序要运行在JVM中

  • 程序,无论是代码还是数据,都要存储在内存中,JVM为Java程序提供并管理所需要的内存空间

  • JVM在其内存开辟了"堆"、“栈”、"方法区"三个区域,分别存储不同的数据;

在这里插入图片描述

垃圾回收机制

  • 垃圾回收器(GC)是JVM自带的一个线程(自动运行着的程序),用于回收没有任何引用指向的对象;

  • Java程序员不用担心内存管理,因为GC会自动进行回收管理;

  • GC的回收对程序员来说是透明的,并不一定一发现有无引用的对象,就立刻回收;

  • System.gc():用于建议虚拟机马上调度GC线程回收资源,具体的实现策略取决于不同的JVM系统;

堆内存

  • 这部分空间用于存储使用new关键字所创建的对象,成员变量是对象的属性,也在堆中;

  • 对象的声明周期:创建对象时存在堆中,对象被GC回收时消失;

  • 内存泄漏:不再使用的对象没有被及时的回收;

  • 建议:当对象不在使用时应及时将引用设置为null;

在这里插入图片描述

非堆–栈

  • 这部分空间用于存储程序运行时(正在调用中的)在方法中声明的所有局部变量;

  • 调用方法时JVM在栈中为该方法分配一个对应的空间,也称为栈帧,栈帧中包含所有的局部变量(包括参数);

  • 当方法调用结束时,栈帧消失;

  • 局部变量的生命周期:调用方法时存在栈中,方法调用结束时与栈帧一并消失;

在这里插入图片描述

非堆–方法区

  • 这部分空间用于存放类的信息(包括方法);

  • Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区;

  • 所有对象共享类的方法,方法仅有一份,通过this来区分具体的对象;

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!