目录
参考博文:https://blog.csdn.net/darkness0604/category_9840308.html
垃圾回收器CMS
CMS的问题:
参考文档:CMS收集器产生的问题和解决方案 - hongdada - 博客园
1,内存碎片化 2,浮动垃圾
1,CMS回收器采用的基础算法是Mark-Sweep,这个算法是会产生碎片的,一旦老年代的垃圾碎片多了,年轻代的就进不来了,然后就会启动paraller old回收器慢慢回收
2,CMS的并发清理会产生浮动垃圾(cms无法在本次gc清除掉,这些就是浮动垃圾)
JVM调优
JVM常用命令行参数
我们一般是把堆的最小内存大小Xms和最大内存大小Xmx设置成一样大,避免每次垃圾回收完成后JVM重新分配内存。
区分概念:内存泄漏memory leak,内存溢出out of memory
java -XX:+PrintCommandLineFlags HelloGC
java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HelloGC PrintGCDetails PrintGCTimeStamps PrintGCCauses
java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC
java -XX:+PrintFlagsInitial 默认参数值
java -XX:+PrintFlagsFinal 最终参数值
java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数
java -XX:+PrintFlagsFinal -version |grep GC
吞吐量和响应时间
调优工具
jvisualVM中判断内存溢出的的一个很重要的界面
垃圾回收器G1
G1的原理模型
分而治之的垃圾回收思想,之前我们学过的JVM内存模型分为新生代 + 老年代 + 永久代(1.7)Perm Generation/ 元数据区(1.8) Metaspace。G1把内存分为一小块一小块的区域Region,这些区域在逻辑上也是分代的:Eden、Survivor、Old,与之前的分代模型完全不同。
并发标记算法
(CMS和G1的核心都是并发标记-通俗的来讲就是一边干活一边产生垃圾,算法是一样的)