网站代运营要多少费用,北京赛车网站开发多少钱,张家港网站建设服务,wordpress页面内容模板一, 垃圾回收分类:
按线程数分#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式分#xff0c;可以分为并发垃圾回收器和独占式垃圾回收器 按碎片处理方式分#xff0c;可以分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存区间分#xff0c;又可分为…一, 垃圾回收分类:
按线程数分可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式分可以分为并发垃圾回收器和独占式垃圾回收器 按碎片处理方式分可以分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存区间分又可分为年轻代垃圾回收器和年老代垃圾回收器
二, GC 的性能指标
吞吐量:
吞吐量就是 CPU 用于运行用户代码的时间与CPU总消耗时间的比值即吞吐量运行用户代码时间 / (运行用户代码时间 垃圾收集时间)应用程序能容忍较高的暂停时间因此高吞吐量的应用程序有更长的时间基准快速响应是不必考虑的吞吐量优先意味着单位时间内STW的时间最短
暂停时间:
一个是按段内应用程序线程暂停让GC线程执行的状态暂停时间优先意味着尽可能让单次 STW 的时间最短 吞吐量 VS 暂停时间:
高吞吐量较好因为这会让应用程序的最终用户感觉只有应用程序线程在 生产性工作直觉上吞吐量越高程序运行越快 低暂停时间(低延迟)较好因为最终用户的角度来看是GC还是其他原因导致一个应用被挂起始终是不好的。在交互式应用程序中具有较低暂停时间非常重要 在设计 GC 算法时我们必须确定目标:一个GC算法只可能针对两个目标之一或者进行折衷 现在标准: 在最大吞吐量优先的情况下降低停顿时间
三, 垃圾回收算法的适用场景
1、标记清除法
特点 简单、收集速度快但会有空间碎片空间碎片会导致后面的GC频率增加。 适合场景只有小部分对象需要进行回收的所以标记清除法比较适用于老年代的垃圾回收因为老年代一般存活对象会比回收对象要多。
2、标记复制法
特点收集速度快可以避免空间碎片但是有空间浪费存活对象较多的情况下复制对象的过程等会非常耗时而且需要担保机制。
适合场景 只有少量对象存活的场景这也正是新生代对象的特点所以一般新生代的垃圾回收器基本都会选择标记复制法。
3、标记整理法
特点 相对于标记复制法不会浪费内存空间相对标记清除法则可以避免空间碎片但是速度比其他两个算法慢。
适合场景 内存吃紧又要避免空间碎片的场景老年代想要避免空间碎片问题的话通常会使用标记整理法。
四, 分代思想 分区思想
所谓分代思想就是根据 JVM 内存的不同内存区域采用不同的垃圾回收算法。例如对于存活对象少的新生代区域比较适合采用复制算法。这样只需要复制少量对象便可完成垃圾回收并且还不会有内存碎片。而对于老年代这种存活对象多的区域比较适合采用标记压缩算法或标记清除算法这样不需要移动太多的内存对象。
分代思想按照对象的生命周期长短将其分为了两个部分新生代、老年代但 JVM 中其实还有一个分区思想即将整个堆空间划分成连续的不同小区间。 每一个小区间都独立使用独立回收这种算法的好处是可以控制一次回收多少个区间可以较好地控制 GC 时间。
五, hotspot JDK9的默认收集器: G1 通用垃圾收集器
G1 是一款面向服务端应用的垃圾收集器它没有新生代和老年代的概念而是将堆划分为一块块独立的 Region。当要进行垃圾收集时首先估计每个 Region 中垃圾的数量每次都从垃圾回收价值最大的 Region 开始回收因此可以获得最大的回收效率。
从整体上看 G1 是基于“标记-整理”算法实现的收集器从局部两个 Region 之间上看是基于“复制”算法实现的这意味着运行期间不会产生内存空间碎片。
G1 收集器的工作过程分为以下几个步骤
初始标记Stop The World仅使用一条初始标记线程对所有与 GC Roots 直接关联的对象进行标记。并发标记使用一条标记线程与用户线程并发执行。此过程进行可达性分析速度很慢。最终标记Stop The World使用多条标记线程并发执行。筛选回收回收废弃对象此时也要 Stop The World并使用多条筛选回收线程并发执行。
G1在对象复制/转移失败或者没法分配足够内存比如巨型对象没有足够的连续分区分配时会触发Full GC。Full GC使用的是stop the world的单线程的Serial Old模式,所以一旦触发Full GC则会STW应用线程并且执行效率很慢。JDK 8版本的G1是不提供Full GC的处理的。对于G1 GC的优化很大的目标就是没有Full GC。
G1 回收器的缺点:
用户程序运行过程中G1 无论是为了垃圾收集产生的内存占用(Footprint) 还是程序运行时的额外执行负载(Overload) 都要比 CMS 要高小内存应用上 CMS 的表现大概率会优于 G1而 G1 在大内存应用上则发挥其优势。
G1 回收器的使用场景:
面向服务端应用针对具有大内存、多处理器的机器(在普通大小的堆里表现并不惊喜)最主要的应用是需要低GC 延迟并具有大堆的应用程序提供解决方案