四、JVM虚拟机内存管理机制 -- softwbc 发布于:2017年12月22日 浏览量:879  |

一、JVM内存模型和GC

虚拟机在运行程序时,会把它管理的内存划分为不同的数据区域。

其中,线程独占的数据区:程序计数器、栈(包括本地方法栈和虚拟机栈),这些区域随线程的消亡释放。

堆、方法区是共享的区域,这部分内存的分配都是动态的,通常所说的GC一般指这块区域。

JVMGC机制其实就是判断哪些内存需要回收、如何回收、什么时候回收的过程。

1Java中通过可达性分析来判断对象是否存活。做可达性分析的过程就是同过选定的一系列GC roots的对象开始向下搜索,当一个对象没有在任何引用链上出现就会被判定为可回收的。(其实不是判定就一定回收)

GC Roots对象是“永久”对象,如栈中引用对象、方法区中静态属性、常量引用的对象等。

2GC回收算法主要有标记清除算法、复制算法、标记整理算法等。

像最简单的标记清除算法,就是分析标记完后,统一回收所有标记的对象;复制算法,是将可用内存分为两块,每次用其中一块,将活着的对象复制到新区域,将用过的一并清除。

一般用来回收年新生代内存。实际使用中JVM将内存分成一块较大的Eden空间和两块Survivor空间,每次使用Eden和一块Survivor,另一块Survivor留做存活对象复制。

标记整理算法,一般用来回收年老代内存,因为年老代没有额外内存担保。做法是先标记,然后让存活的对象移动到一端,清理边界以外的内存。

3、对于GC的时机,大多数情况下对象优先分配在Eden区中,当Eden没有足够的空间时,JVM会发起一次Minor GC

       在进行Minor GC之前,JVM会检查老年代最大可用的空间是否大于新生代所有对象的空间,成立则MinorGC是安全的,否则判断是否允许担保失败,是尝试MinorGC,否则FullGC


二、类加载机制ClassLoader























三、JVM使用的编码








关于我们 |  广告服务 |  联系我们 |  网站声明

Copyright © 2015 - 2016 DISPACE.NET |  使用帮助 |  关于我们 |  投诉建议

京ICP备13033209号-2