Java内存讲解

时间 : 2020-06-08
点击次数 : 321

      Java 内存

      为什么要将堆内存分区?

      对于一个大型的系统,当创建的对象及方法变量比较多时,即堆内存中的对象比较多,如果逐一分析对象是否该回收,效率很低。分区是为了进行模块化管理,管理不同的对象及变量,以提高 JVM 的执行效率。

      堆内存分为哪几块?

      Young Generation Space 新生区(也称新生代)

      Tenure Generation Space养老区(也称旧生代)

      Permanent Space 永久存储区

      分代收集算法

      内存分配有哪些原则?

      对象优先分配在 Eden

      大对象直接进入老年代

      长期存活的对象将进入老年代

      动态对象年龄判定

      空间分配担保

      Young Generation Space (采用复制算法)

      主要用来存储新创建的对象,内存较小,垃圾回收频繁。这个区又分为三个区域:一个 Eden Space 和两个 Survivor Space。

      当对象在堆创建时,将进入年轻代的Eden Space。

      垃圾回收器进行垃圾回收时,扫描Eden Space和A Suvivor Space,如果对象仍然存活,则复制到B Suvivor Space,如果B Suvivor Space已经满,则复制 Old Gen

      扫描A Suvivor Space时,如果对象已经经过了几次的扫描仍然存活,JVM认为其为一个Old对象,则将其移到Old Gen。

      扫描完毕后,JVM将Eden Space和A Suvivor Space清空,然后交换A和B的角色(即下次垃圾回收时会扫描Eden Space和B Suvivor Space。

      Tenure Generation Space(采用标记-整理算法)

      主要用来存储长时间被引用的对象。它里面存放的是经过几次在 Young Generation Space 进行扫描判断过仍存活的对象,内存较大,垃圾回收频率较小。

      Permanent Space

      存储不变的类定义、字节码和常量等。

上一篇:Linux正则表达式入门及应用

上一篇:Java 的4种引用方式?

友情链接:云联泰达OA开发
烟台网云网络科技有限公司 鲁ICP备14027327号-3

回到顶部