返回顶部

Jvm(day4—垃圾回收)

Jvm垃圾回收

相关概念

  • GC如何判断对象可回收?

1. 引用计数法(已淘汰)
    引用新增+1,释放-1,计数为0释放。
2. 可达性分析算法(根引用)
    从GcRoot开始向下搜索,经过的路径为引用链,当对象与GcRoot之间没有引用链则被回收。
    GcRoot包括:静态变量(方法区),常量(方法区),局部变量(虚拟机栈)。
  • 4种引用类型

1. 强引用:当虚拟机栈中有对象引用时,GC不会回收对象。(如new出来的对象);
2. 软引用:通过SoftRefrence持有,jvm堆内存不足时回收;
3. 弱引用:通过WeekRefrence持有,GC发现即回收;
3. 虚引用:通过PhantomRefrence持有,随时被回收;

3种垃圾回收算法

1. 标记——复制(新生代)
    优势:避免了碎片空间;
    劣势:需要更多的内存空间;存货对象多时,效率低;
2. 标记——清除(老年代)
    劣势:会造成碎片空间;性能不稳定;
3. 标记——整理(老年代)
    优势:避免了碎片空间;无需多余的内存空间;
    劣势:效率低;

7种垃圾回收器

 

 新生代GC器

1. Serial
    单线程;简单高效
2. ParallelNew
    多线程;
3. ParallelScavenge
    多线程;高吞吐

老年代GC器

1. CMS
    回收算法:标记——清除;
    特点:多线程(用户线程与垃圾回收线程同时运行);低停顿;性能高;
    劣势:存在浮动垃圾;存在碎片空间;对CPU敏感;
    过程:1)初始标记:标记和GcRoot直连的对象(存在STW);
         2)并发标记:从GcRoot开始遍历,标记存活对象,该过程与用户线程并发运行;
         3)重新标记:修正上一阶段中因用户线程运行而导致变动的对象(存在STW);
         4)并发清除:清除未标记的对象;
2. Serial Old
    回收算法:标记——整理;
    特点:单线程;    
3. Parallel Old
    回收算法:标记——整理;
    特点:多线程;    

G1收集器

1. 并行与并发
    并行:通过多个CPU缩短STW停顿时间;
    并发:用户线程与垃圾回收线程并发执行;
2. 分代收集
    G1独自管理堆内存。新生代:标记——复制;老年代:标记——整理;
3. 空间整合
    无碎片空间
4. 可预测的停顿
    Gc时间可设置            

jvm常用参数

参数举例说明
堆相关 -Xms:1024M jvm堆区初始化内存大小(最小内存)
  -Xmx:2048M jvm堆区最大可占用内存大小(最大内存),超出这个值,会抛出OOM 注:一般-Xms、-Xmx两个参数会配置相同值 能在Java垃圾回收机制清理完堆区后,不需要重新分隔计算堆区的大小而浪费资源
  -XX:NewSize:256M 年轻代初始化内存(优先级高)
  -XX:MaxnewSize:512M 年轻代最大可占用内存
  -Xmn 对-XX:newSize、-XX:MaxnewSize两个参数同时进行配置(优先级中)
  -XX:NewRatio:4 设置年轻代:老年代大小比值(优先级低) 4表示年轻代:老年代=1:4,即年轻代占整个堆的1/5
栈相关 -Xss:128K 每个线程的虚拟机栈的大小
方法区相关 -XX:PermSize=10M jvm方法区初始化内存大小
  -XX:MaxPermSize=10M jvm方法区最大可占用内存大小
其他 -XX:TraceClassLoading 启动在日志中追踪类加载情况
  -XX:TraceClassUnloading 启动在日志中追踪类卸载情况
posted @ 2022-09-26 22:26  dork-h  阅读(32)  评论(0)    收藏  举报