垃圾收集算法
经典的垃圾回收算法以下几种:
标记–清除算法(Mark-Sweep)
回收前状态:
回收后状态:
优缺点:
优点:算法执行分为两个阶段标记与清除,所有的回收算法,基本都基于标记回收算法做了深度优化
缺点:效率问题,内存空间碎片(不连续的空间)
复制算法(Copying)
回收前状态:
Eden内存空间 8
Survivor1空间(From空间)1
Survivor2空间(To空间) 1
Eden内存空间与Survivor空间 8:1
回收后状态:
Survivor1空间(From空间)1
Eden内存空间与Survivor空间 8:1
优缺点:
优点比较标记清除算法,避免了回收造成的内存碎片问题
缺点:以局部的内存空间牺牲为代价,不过空间的浪费比较小,默认8:1的比例1是浪费的。复制也有一定的效率与空间成本
标记整理算法(Mark-Compact)
回收前状态:
回收后状态:
优缺点:
优点:避免了,空间的浪费,与内存碎片问题。
缺点:整理时复制有效率成本。
垃圾收集器
七种垃圾收集器
- 1、 Serial(串行GC)-XX:+UseSerialGC
- 2、 ParNew(并行GC)-XX:+UseParNewGC
- 3、 Parallel Scavenge(并行回收GC)
- 4、 Serial Old(MSC)(串行GC)-XX:+UseSerialGC
- 5、 CMS(并发GC)-XX:+UseConcMarkSweepGC
- 6、 Parallel Old(并行GC)-XX:+UseParallelOldGC
- 7、 G1(JDK1.7update14才可以正式商用)
调优方法
新对象预留新生代
由于fullGC(老年代)的成本远比minorGC(新生代和老年代)的成本大,所以给应用分配一个合理的新生代空间,尽量将对象分配到新生代减小fullGC的频率
大对象进入老年代
将大对象直接分配到老年代,保持新生代对象的结构的完整性,以提高GC效率, 以通过-XX:PretenureSizeThreshold设置进入老年代的阀值
稳定与震荡的堆大小
稳定的对大小是对垃圾回收有利的,方法将-Xms和-Xmx的大小一致
吞吐量优先
尽可能减少系统执行垃圾回收的总时间,故采用并行垃圾回收器
-XX:+UseParallelGC或使用-XX:+UseParallelOldGC
降低停顿
使用CMS回收器,同时减少fullGC的次数
获取gc信息的方法
-verbose:gc或者-XX:+PrintGC
获取gc信息-XX:+PrintGCDetails
获取更加详细的gc信息-XX:+PrintGCTimeStamps
获取GC的频率和间隔-XX:+PrintHeapAtGC
获取堆的使用情况-Xloggc:D:\gc.log
指定日志情况的保存路径
jvm调优实战-tomcat启动加速
在tomcat的bin/catalina.bat文件的开头添加相关的配置

相关推荐
版权声明
- 本文链接: https://www.cayzlh.com/2018/08/19/99ebe472.html
- 版权声明: 文章内容仅用作学习和分享,如有雷同,纯属拷贝。
留言区