惠州网站建设外包,网站支持ipv6做哪些改造,网站建设是多少钱,专业定制网吧桌椅目录
垃圾收集器种类
HotSpot虚拟机所包含的收集器
垃圾收集器部分源码
垃圾收集器后台日志参数说明与配对关系
1、串行垃圾收集器
串行垃圾收集器运行示意图
1#xff09;、编写测试代码
2#xff09;、设置垃圾回收为串行收集器
3#xff09;、启动程序#xff…目录
垃圾收集器种类
HotSpot虚拟机所包含的收集器
垃圾收集器部分源码
垃圾收集器后台日志参数说明与配对关系
1、串行垃圾收集器
串行垃圾收集器运行示意图
1、编写测试代码
2、设置垃圾回收为串行收集器
3、启动程序GC日志信息解读
2、并行垃圾收集器
并行垃圾收集器-ParNew运行示意图
1、编写测试代码
2、设置垃圾回收为并行收集器ParNew
3、启动程序GC日志信息解读
并行垃圾收集器-ParallelGC运行示意图
1、编写测试代码
2、设置垃圾回收为并行收集器ParallelGC
3、启动程序GC日志信息解读
3、CMS垃圾收集器
CMS垃圾收集器运行示意图
1、编写测试代码
2、设置CMS垃圾回收参数
3、启动程序GC日志信息解读
4、G1垃圾收集器
G1垃圾收集器(将新生代老年代的物理空间划分取消了)示意图如下
G1垃圾收集器(G1算法将堆划分为若干个区域-Region)
G1垃圾收集器原理
G1垃圾回收模式Young GC
G1垃圾回收模式Mixed GC
G1垃圾收集器运行示意图
1、编写测试代码
2、G1垃圾收集器相关参数
3、设置G1垃圾回收参数
4、启动程序GC日志信息解读
G1垃圾收集器 vs CMS垃圾收集器
G1垃圾收集器优化建议
可视化GC日志分析工具
1、GC日志输出参数
2、GC Easy可视化工具
GC Easy查看gc报告 垃圾收集器种类 HotSpot虚拟机所包含的收集器 垃圾收集器部分源码 垃圾收集器后台日志参数说明与配对关系 DefNew - Default New GenerationTenured - OldParNew - Parallel New GenerationPSYoungGen - Parallel ScavengeParOldGen - Parallel Old Generation
1、串行垃圾收集器
串行垃圾收集器是最基本的、发展历史最悠久的收集器。
特点单线程、简单高效与其他收集器的单线程相比对于限定单个CPU的环境来说Serial收集器由于没有线程交互的开销专心做垃圾收集自然可以获得最高的单线程收集效率。收集器进行垃圾回收时必须暂停其他所有的工作线程直到它结束Stop The World。
串行垃圾收集器运行示意图 1、编写测试代码
import java.util.UUID;/**************************************************** title***************************************************/
public class TestGC1 {/*** java -XX:PrintCommandLineFlags -version** param args*/public static void main(String[] args) {String str smart;while (true) {str str UUID.randomUUID();str.intern();}}
}2、设置垃圾回收为串行收集器
在程序运行参数中添加2个参数如下
-XX:UseSerialGC 指定年轻代和老年代都使用串行垃圾收集器
-XX:PrintGCDetails 打印垃圾回收的详细信息
3、启动程序GC日志信息解读 2、并行垃圾收集器
并行垃圾收集器在串行垃圾收集器的基础之上做了改进将单线程改为了多线程进行垃圾回收这样可以缩短垃圾回收的时间。这里是指并行能力较强的机器
当然了并行垃圾收集器在收集的过程中也会暂停应用程序这个和串行垃圾回收器是一样的只是并行执行速度更快些暂停的时间更短一些。
并行垃圾收集器-ParNew运行示意图 ParNew垃圾收集器
通过-XX:UseParNewGC参数设置年轻代使用ParNew回收器老年代使用的依然是串行收集器
通过-XX:ParallelGCThreads可以限制GC线程数量默认开启和cpu数目相同的线程数
1、编写测试代码
同之前的代码
2、设置垃圾回收为并行收集器ParNew
在程序运行参数中添加1个参数如下
-XX:UseParNewGC -Xms8m -Xmx8m -XX:PrintGCDetails -XX:PrintCommandLineFlags
3、启动程序GC日志信息解读 解释 ParNew - 年轻代ParallelNew垃圾收集器 Tenured - 老年代Serial Old垃圾收集器 并行垃圾收集器-ParallelGC运行示意图 ParallelGC垃圾收集器
ParallelGC收集器工作机制和ParNewGC收集器一样只是在此基础之上新增了两个和系统吞吐量相关的参数使得其使用起来更加的灵活和高效。适合大数据计算。
1、编写测试代码
同之前代码
2、设置垃圾回收为并行收集器ParallelGC
ParallelGC垃圾收集器相关参数如下
-XX:UseParallelGC
-XX:UseParallelOldGC
-XX:MaxGCPauseMillis
-XX:ParallelGCThreadsN
解释 1-XX:UseParallelGC、-XX:UseParallelOldGC这两个参数可以相互激活也就是说配置一个可以可以不用配置另外一个 2-XX:MaxGCPauseMillis - 最大停顿时间,其值为大于0的毫秒数垃圾收集器尽可能保证回收的耗时不超过设定的值但是并不是越小越好如果值设置太小那么GC的频率会提高这样吞吐量就降低了。 3-XX:GCTimeRatio99 - 控制吞吐量大小其值为0-100的整数表示吞吐量默认值是99表示允许1%的垃圾回收时间占比。 4-XX:ParallelGCThreadsN - 控制垃圾回收线程数此参数设置年轻代并行收集器的线程数一般与CPU数量相等过多的线程数量会影响垃圾回收以及整个程序的性能。 5-XX:UseAdaptiveSizePolicy - ParallelGC可以自动调整Survivor空间大部分的程序使用自动调整可以满足要求个别应用在需要的情况下可以关闭自动调整进行手动调整
具体请参考https://www.cnblogs.com/ysqzy/p/16930918.html
3、启动程序GC日志信息解读 解释 PSYoungGen - Parallel Scavenge ParOldGen - Parallel Old Generation
3、CMS垃圾收集器
CMS全称 Concurrent Mark Sweep是一款并发的、使用标记-清除算法的垃圾回收器该回收器是针对老年代垃圾回收的通过参数-XX:UseConcMarkSweepGC进行设置。适合互联网响应时间短、CPU核数多的应用。
CMS垃圾收集器运行示意图 CMS垃圾回收器的执行过程如下 1、编写测试代码
同之前的代码
2、设置CMS垃圾回收参数
-‐XX:UseConcMarkSweepGC
注意开启后将采用ParNewCMSSerial Old收集器组合
3、启动程序GC日志信息解读 4、G1垃圾收集器
G1垃圾收集器是在jdk1.7update4中正式使用的全新的垃圾收集器oracle官方在jdk9中将G1变成默认的垃圾收集器以替代CMS。
G1的设计原则就是简化JVM性能调优开发人员只需要简单的三步即可完成调优
第一步开启G1垃圾收集器第二步设置堆的最大内存第三步设置最大的停顿时间 G1中提供了三种模式垃圾回收模式Young GC、Mixed GC 和 Full GC在不同的条件下被触发
G1垃圾收集器相对比其他收集器而言最大的区别在于它取消了年轻代、老年代的物理划分取而代之的是将堆划分为若干个区域Region这些区域中包含了有逻辑上的年轻代、老年代区域。这样做的好处就是我们再也不用单独的空间对每个代进行设置了不用担心每个代内存是否足够。
G1垃圾收集器(将新生代老年代的物理空间划分取消了)示意图如下 G1垃圾收集器(G1算法将堆划分为若干个区域-Region) G1垃圾收集器原理 解释 G1每个堆区域最大32M,默认划分2048个区域也就是说最大64G内存。
在G1划分的区域中年轻代的垃圾收集依然采用暂停所有应用线程的方式将存活对象拷贝到老年代或者Survivor空间G1收集器通过将对象从一个区域复制到另外一个区域完成了清理工作。
这就意味着在正常的处理过程中G1完成了堆的压缩至少是部分堆的压缩这样也就不会有cms内存碎片问题的存在了。
在G1中有一种特殊的区域叫Humongous区域。如果一个对象占用的空间超过了分区容量50%以上G1收集器就认为这是一个巨型对象。
这些巨型对象默认直接会被分配在老年代但是如果它是一个短期存在的巨型对象就会对垃圾收集器造成负面影响。
为了解决这个问题G1划分了一个Humongous区它用来专门存放巨型对象。如果一个H区装不下一个巨型对象那么G1会寻找连续的H分区来存储。为了能找到连续的H区有时候不得不启动Full GC。
针对Young GC主要是对Eden区进行GC它在Eden空间耗尽时会被触发。Eden空间的数据移动到Survivor空间中如果Survivor空间不够Eden空间的部分数据会直接晋升到年老代空间。
Survivor区的数据移动到新Survivor区中也有部分数据晋升到老年代空间中。最终Eden空间的数据为空GC停止工作应用线程继续执行。
G1垃圾回收模式Young GC G1垃圾回收模式Mixed GC 分2步
全局并发标记global concurrent marking拷贝存活对象evacuation
当-XX:InitiatingHeapOccupancyPercentN (老年代大小占堆百分比达45%的时候触发mixed GC)触发MixedGC执行下面流程
G1垃圾收集器运行示意图 1、编写测试代码
同之前的代码
2、G1垃圾收集器相关参数
-XX:UseG1GC
-XX:MaxGCPauseMillis - 执行最大GC暂停时间
-XX:G1HeapRegionSizeN (1-32M,默认2048个分区最大64G内存)
-XX:G1ReservePercentN - 预留空闲空间避免内存溢出默认10%一般不能设置
-XX:ConcGCThreadsN - GC线程数
-XX:InitiatingHeapOccupancyPercentN (老年代大小占堆百分比达45%的时候触发mixed GC)
3、设置G1垃圾回收参数
‐XX:PrintGC 输出GC日志
‐XX:PrintGCDetails 输出GC的详细日志
‐XX:PrintGCTimeStamps 输出GC的时间戳以基准时间的形式
‐XX:PrintGCDateStamps 输出GC的时间戳以日期的形式如 2013‐05‐04T21:53:59.2340800
‐XX:PrintHeapAtGC 在进行GC的前后打印出堆的信息
‐Xloggc:F://test//gc.log 日志文件的输出路径
4、启动程序GC日志信息解读 G1垃圾收集器 vs CMS垃圾收集器 G1不会产生碎片G1可以精准控制停顿它把整堆划分为多个固定大小的区域每次根据停顿时间去收集垃圾最多的区域
G1垃圾收集器优化建议 年轻代大小 避免使用 -Xmn 选项或 -XX:NewRatio 等其他相关选项显式设置年轻代大小固定年轻代的大小会覆盖暂停时间目标 暂停时间目标不要太过严苛 G1 GC 的吞吐量目标是 90% 的应用程序时间和 10%的垃圾回收时间评估 G1 GC 的吞吐量时暂停时间目标不要太严苛。目标太过严苛表示您愿意承受更多的垃圾回收开销而这会直接影响到吞吐量 可视化GC日志分析工具
1、GC日志输出参数
前面通过-XX:PrintGCDetails可以对GC日志进行打印我们就可以在控制台查看这样虽然可以查看GC的信息但是并不直观可以借助于第三方的GC日志分析工具进行查看。 在日志打印输出涉及到的参数如下
‐XX:PrintGC 输出GC日志
‐XX:PrintGCDetails 输出GC的详细日志
‐XX:PrintGCTimeStamps 输出GC的时间戳以基准时间的形式
‐XX:PrintGCDateStamps 输出GC的时间戳以日期的形式如 2013‐05‐04T21:53:59.2340800
‐XX:PrintHeapAtGC 在进行GC的前后打印出堆的信息
‐Xloggc:F://test//gc.log 日志文件的输出路径 测试 最后生成gc.log,我们利用下面的可视化工具进行分析。
2、GC Easy可视化工具
GC Easy是一款在线的可视化工具易用、功能强大 GCEasy官网地址Universal JVM GC analyzer - Java Garbage collection log analysis made easy
打开官网上传gc.log,点击分析即可。分析完之后它会给我们出相关的分析报告那查看指标如何解读呢
GC Easy查看gc报告