JVM调优简介

JVM中被划分为三个区域:年轻代,年老代和持久代(Permanent)。
其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。
这里写图片描述
年轻代
所有新生成的对象首先都是放在年轻代的,年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区:即一个新生代(Eden),两个复活代(Survivor)设S0和S1。
(当对象在Eden出生后,在经过一次Minor GC(对年轻代的垃圾回收)后,如果对象还存活,并且能够被另外一块Survivor区域所容纳,则使用复制算法将这些仍然还活着的对象复制到另外一块Survivor区域(S0)中,然后清理所使用过的Eden和Survivor区,并且将这些对象的年龄设置为1,以后对象在Survivor区每经过一次Minor GC,就将对象的年龄加1,当对象的年龄达到阈值时(默认是15岁)这些对象就会成为老年代。)
在GC开始的时候,对象只会存在于Eden和S0中,此时S1为空。在进行GC时,Eden区中所有存活对象会被复制到S1中,而在S0中,仍然存活的对象会根据他们的年龄来决定去留,年龄达到阈值的移动至年老代中,没有达到阈值的复制到S1。经过此次GC,Eden区和S0区已经被清空,此时S0和S1互换,即刚刚被清空的S0作为新的S1继续为空。Minor GC会一直重复这个过程,直至S1被填满后,会将所有对象移动至年老代。
因为年轻代中的对象基本都是朝生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。
年老代
Full GC 是发生在老年代的垃圾收集动作,所采用的是标记-清除算法。
在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。可以认为年老代中存放的都是一些生命周期较长的对象。因此,Full GC 发生的次数不会有 Minor GC 那么频繁,并且做一次 Full GC 要比进行一次 Minor GC 的时间更长。 另外,标记-清除算法收集垃圾的时候会产生许多的内存碎片 ( 即不连续的内存空间 ),此后需要为较大的对象分配内存空间时,若无法找到足够的连续的内存空间,就会提前触发一次 GC 的收集动作。
因为年轻代中的对象基本都是朝生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。
持久代
用于存放静态文件,如今Java类、方法等元数据。持久代对垃圾回收没有显著影响,,持久代不是Java堆内存的一部分,存放JVM运行时使用的类,同样包含了Java SE库的类和方法。对象在full GC时进行垃圾收集。在Java 8中,持久代被彻底移除,取而代之的是另一块与堆不相连的本地内存——元空间。

Scavenge GC

一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。因为大部分对象都是从Eden区开始的,同时Eden区不会分配的很大,所以Eden区的GC会频繁进行。因而,一般在这里需要使用速度快、效率高的算法,使Eden去能尽快空闲出来。

Full GC

对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个对进行回收,所以比Scavenge GC要慢,因此应该尽可能减少Full GC的次数。在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。有如下原因可能导致Full GC:
· 年老代(Tenured)被写满
· 持久代(Perm)被写满
· System.gc()被显示调用
·上一次GC之后Heap的各域分配策略动态变化

堆(Heap)和非堆(Non-heap)内存
Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,

具体调优参数配置信息见此贴
https://blog.csdn.net/BigData_Mining/article/details/80874549

猜你喜欢

转载自blog.csdn.net/qq_33157669/article/details/81662453
今日推荐