1、如何查看JVM的运行参数
[root@vm-10-11-146-1 deploy]# jcmd 29473 VM.flags
29473:
-XX:CICompilerCount=3 -XX:InitialHeapSize=62914560 -XX:MaxHeapSize=1004535808 -XX:MaxNewSize=334495744 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=20971520 -XX:OldSize=41943040 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
-XX:+UseParallelGC
使用平行收集器(新生代) PS - Parallel Scavenge
平行收集器是Server端的默认收集器,是一个主要针对 新生代 的收集器。
使用复制算法,多线程并行。
特点
被称为是吞吐量优先收集器,它的目标就是为了是JVM达到一个可控的吞吐量,所谓吞吐量是指:代码运行时间/代码运行时间+GC时间使用场景
和用户体验优先的场景不一样,主要是用在保证后台服务尽快运行完成,而不是提高响应速度。适合在后台运算,又不需要太多交互的任务。
PS收集器在新生代采用多线程复制算法。
什么是复制算法?复制算法在新生代是怎样实现的?
复制算法是指,将内存划分成两个相同大小的区域A/B,将A中还存活的对象复制到B区域,然后再将A区域中所有的对象给清除。
缺点是会有额外的空间支出。
新生代中的复制算法没有将新生代完全分成1:1的区域,而是新增了两个survivor区域A、B,AB各占新生代的10%。当触发新生代GC时,先将Eden区和A或者B(第一次GC时候,可能A和B都是空的)的存活对象复制到另外一个survivor区域。然后将该两个区域清空。
可和新生代PS收集器相配合的老年代的GC策略是Parallel Old和Serial Old。
Parallel Old是PS收集器的老年代版本,使用多线程和“标记-整理”算法。
什么是标记整理
标记整理算法,在标记清除算法(标记而后清除无用对象)之后,将有用的对象向一段移动,并更新其引用的指针。
缺点是要移动对象,会造成性能的影响。
Serial Old 是单线程的标记整理算法。
3. 重要参数以及工具
通过
jstat -gcutil 23980 1000
来查看jvm进程的GC情况。
如何在gc有问题的时候临时开启gc日志?
jinfo -flag +PrintGCDetails 29473
有哪些参数可以实时开启和关闭?
java -XX:+PrintFlagsFinal -version|grep manageable
查看运行时对象分布情况?
jmap -histo:live 19035
jmap -heap 19035