Jvm基础篇

        JVM(虚拟机),包括class文件编译区(经过编译的class文件)、类加载器系统(类加载器【自定义加载器、应用程序加载器、扩展类加载器、引导类加载器】)、运行时数据区(如下图)、执行引擎(进行代码的执行操作)、本地方法接口、本地方法库。

        Tip:在jdk1.8之后,针对Hotspot VM,方法区改为元空间,具体变化体现在,元空间使用本地内存,且在配置上也有区别。

jdk1.8之前,为方法区分配大小的参数为:

-XX:PermSize 设置持久代 Jdk7版本及以前版本
-XX:MaxPermSize 设置最大持久代 Jdk7版本及以前版本

jdk1.8后:

-XX:MetaspaceSize 元空间大小 Jdk8版本
-XX:MaxMetaspaceSize 最大元空间 Jdk8版本

 

Jvm基础篇_第1张图片

1、关于垃圾回收:

Jvm基础篇_第2张图片

垃圾回收主要发生在堆区,堆区划分为新生代和老年代。新生代具体可划分为伊甸园区(Eden区),S0区,S1区。在jvm中Eden:S0:S1比例为8:1:1,该比例通过-XX:SurvivorRatio来调整。

当Eden区满后,根据GCRoot,将其放入S0或者S1区(S0和S1采用复制算法),判断S0和S1存活达15次的对象(:15是默认值可通过-XX:MaxTenuringThreshold=N来调整),将符合条件的对象尝试放入老年代,如果发现老年代放不下,老年代会触发Major GC,再次尝试放入老年代,如果老年代还放不下,触发Full GC(对老年代和新生代进行垃圾回收),如果还放不下,则报OOM。

对于大对象:新生代放不下,触发Minor GC,对新生代进行垃圾回收,如果新生代放不下,则尝试直接放入老年代,如果老年代放不下,触发Major GC,再次尝试放入老年代,如果老年代还放不下,触发Full GC(对老年代和新生代进行垃圾回收),如果还放不下,则报OOM。

2、垃圾回收器

Jvm基础篇_第3张图片

你可能感兴趣的:(java,jvm,java,jvm)