当前位置: 首页 > news >正文

电气网站模板网站建设与组织管理

电气网站模板,网站建设与组织管理,广州网站备案方案,医疗器械软件开发流程目录 一、GC分类与性能指标 #xff08;一#xff09;垃圾回收器分类 #xff08;二#xff09;性能指标 #xff08;三#xff09;不可能三角 二、不同的垃圾回收器概述 三、Serial回收器#xff1a;串行回收 四、ParNew回收器#xff1a;并行回收 五、Parall…目录 一、GC分类与性能指标 一垃圾回收器分类 二性能指标 三不可能三角 二、不同的垃圾回收器概述 三、Serial回收器串行回收 四、ParNew回收器并行回收 五、Parallel回收器吞吐量优先 六、CMS回收器低延迟 七、G1回收器区域化分代式 一Region 二记忆集 三运行过程 八、垃圾回收器总结 九、GC日志分析 一、GC分类与性能指标 一垃圾回收器分类 1、按垃圾回收线程数 串行回收指同一个时间段内只允许一个CPU用于执行垃圾回收操作此时工作线程被暂停直到垃圾收集工作结束。在单CPU处理器或者较小应用内存等硬件平台不是特别优越的场合串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的client模式下的JVM中 并行垃圾回收器和串行相反并行收集可以运用在多个CPU同时执行垃圾回收因此提升了应用的吞吐量不过并行回收仍然与串行回收一样采用独占式使用了STW机制 2、按照工作模式分 并发式垃圾回收器与应用程序交替工作以尽可能减少应用程序的停顿时间 独占式一旦运行就停止应用程序中所有的用户线程直到垃圾回收过程完全结束 3、按照碎片处理方式 压缩式比如标记整理算法内存分配可以使用指针碰撞。 非压缩式比如标记清除算法会产生垃圾碎片内存分配使用空闲列表 4、按个工作内存区间分 年轻代 老年代 二性能指标 1、吞吐量 运行用户代码的时间占总运行时间的比例 总运行时间程序的运行时间内存回收的时间 吞吐量优先意味着单位时间内STW的时间最短 2、垃圾收集开销 吞吐量的补数运行时间运行用户代码的时间垃圾回收的时间垃圾收集所占用的时间与总运行时间的比例 3、暂停时间 执行垃圾收集时程序的工作线程被暂停的时间 暂停时间优先意味着单次STW的时间最短但是频率可能增加 4、收集频率 相对于应用程序的执行收集操作发生的频率 5、内存占用 Java堆区所占的内存大小 6、快速 一个对象从诞生到被回收经历的时间 三不可能三角 简单来说抓住两点吞吐量和暂停时间 高吞吐量与低暂停时间是一对互相竞争的。因为如果高吞吐量优先必然需要降低内存回收的执行频率导致GC需要更长的暂停时间来执行内存回收。 如果选择低暂停时间低延迟优先为原则也只能频繁的执行内存回收引起程序吞吐量的下降 现在的标准在最大吞吐量优先的情况下降低停顿时间STW 二、不同的垃圾回收器概述 7款经典垃圾收集器和垃圾分代之间的关系 垃圾收集器的组合关系 jdk8之前可以用虚线参考关系CMS下面的实线是CMS回收失败的后备方案JDK8中取消了红线的组合标记为废弃的。如果要用也可以用。JDK9中将红线做了removejdk14中弃用了绿线组合jdk14中删除了CMS GCJDK9默认G1JDK8默认Parallel Scavenge 和Parallel old Gc新生代用了Parallel Scavenge 则老年代自动触发用Parallel oldParallel底层与ParNew底层不同所以不能和CMS组合 如何查看默认的垃圾收集器 -XX:PrintCommandLineFlagsjinfo -flag 相关垃圾回收器参数 进程ID 三、Serial回收器串行回收 Serial收集器采用复制算法串行回收和STW机制的方式执行内存回收。除了年轻代还有用于执行老年代的Serial old收集器同样采取了串行回收但是用标记压缩算法。 使用一个CPU或者一条收集线程去完成垃圾收集工作在进行垃圾收集时必须暂停其他所有工作线程 优势简单而高效对于限定单个CPU的环境来说由于没有线程交互的开销可以获取最高的单线程收集效率 HotSpot虚拟机中使用-XX:UseSerialGC指定年轻代和老年代使用串行收集器 对于交互强的应用而言并不会采取串行垃圾收集器 四、ParNew回收器并行回收 除了采用并行回收其他方面和Serial之间几乎没有任何区别 -XX:UseParNewGC 手动指定ParNew收集器执行内存回收任务它表示年轻代使用不影响老年代 -XX:ParallelGCThreads 限制线程数量默认开启和CPU数据相同的线程数 五、Parallel回收器吞吐量优先 也采用并行回收同样是基于标记-复制算法实现的但和ParNew不同它的目标是达到一个可控制的吞吐量。所谓吞吐量就是处理器用于运行用户代码的时间与处理器总消耗时间的比值 即 Parallel Scavenge 收集器提供了两个参数用于精确控制吞吐量分别是控制最大垃圾收集停顿时间 的 -XXMaxGCPauseMillis 参数以及直接设置吞吐量大小的 -XXGCTimeRatio 参数。 接下来介绍参数 -XX:UseParallelGC 手动指定年轻代使用此收集器执行内存回收任务-XX:UseParallelOldGC 手工指定老年代使用并行回收收集器分别适用于新生代和老年代默认jdk8是开启的上面这两个参数相互关联开启一个默认开启另一个。-XX:ParallelGCThreads 设置年轻代并行收集器的线程数一般与CPU数量相同如果CPU数量大于8个则值35*N/8-XX:MaxGCPauseMillis设置收集器最大停顿时间单位毫秒。允许的值是一个大于0的毫秒数收集器将尽力保证内存回收花费的时间不超过用户设定值。-XX:GCTimeRatio 垃圾收集占总时间比用于衡量吞吐量大小默认99取值范围0-100也就是垃圾回收时间不超过1%与上一个参数矛盾暂停时间越长Ratio参数就容易超过设定比例-XX:UseAdaptiveSizePolicy 开启自适应调节策略。这种模式下年轻代大小Eden和Survivor的比例晋升老年底对象年龄参数都会被自动调整为了达到堆大小吞吐量和停顿时间之间的平衡点在手动调优比较困难的场景下可以直接用自适应方式仅指定虚拟机最大堆目标吞吐量和停顿时间让虚拟机自己完成调优工作 六、CMS回收器低延迟 jdk1.5推出 Concurrent Mark Sweep 并发的标记清除第一次实现了让垃圾收集线程与用户线程同时工作 从名字包含 “Mark Sweep” 上就可以看出 CMS 收集器是基于标记 - 清除算法实现的它的运作 过程相对于前面几种收集器来说要更复杂一些整个过程分为四个步骤包括 初始标记STW仅仅只是标记处GC Roots能直接关联的对象一旦标记完成后就会恢复之前被暂停的所有应用线程由于直接关联对象比较小所以这里速度非常快并发标记从GCRoots的直接关联对象开始遍历整个对象图的过程这个过程耗时较长但是不需要停顿用户线程。可以与垃圾收集线程一起并发运行重新标记为了修正并发标记期间因用户程序继续运作导致标记产生变动的那一部分对象的标记记录并发清除清理删除标记阶段判断的已经死亡的对象释放内存空间。由于不需要移动存活对象所以这个阶段也可以与用户线程同时并发 初始标记和重新标记阶段仍然需要STW机制 而且由于在垃圾收集阶段用户线程没有中断所以在CMS回收过程中还应该确保应用程序用户线程有足够的内存可用。因此CMS收集器不能像其他收集器那样等到老年代几乎填满再进行回收而是当堆内存使用率达到某一阈值时便开始进行回收。 要是CMS运行期间预留的内存无法满足程序需要就会出现一次Concurrent Mode Failure失败这时虚拟机启用备用方案临时启用Serial old 收集器来重新进行老年代的垃圾收集这样停顿时间就长了。 CMS采取标记清除算法会产生内存碎片只能够选择空闲列表执行内存分配 为什么不采取标记压缩呢 因为并发清除时如果用压缩整理内存原来的用户线程使用的内存就无法使用了。标记压缩更适合STW场景下使用 优点 并发收集低延迟 缺点 会产生内存碎片对CPU资源非常敏感 在并发阶段会占用一部分线程导致应用程序变慢无法处理浮动垃圾 并发标记阶段是与工作线程同时运行如果并发阶段产生垃圾对象CMS无法进行标记导致新产生的垃圾对象没有被及时回收只能在下一次执行GC时释放空间 接下来介绍参数 -XX:UseConcMarkSweepGC 手工指定CMS收集器执行内存回收任务开启后自动将-XX:UseParNewGC打开即ParNewYoung区CMSold区Serial GC组合-XX:CMSlnitiatingOccupanyFraction 设置堆内存使用率的阈值一旦达到该阈值则开始进行回收jdk5及之前默认68即老年代的空间使用率达到68%时会执行一次CMS回收JDK6及以上默认值为92%如果内存增长缓慢可以设置一个稍大的值有效降低CMS的触发频率减少老年代回收的次数如果应用程序内存使用率增加很快则应该降低这个阈值以避免频繁触发老年代串行收集器。-XX:UseCMSCompactAtFullCollection 用于执行完Full GC后对内存空间进行压缩整理不过内存压缩无法并发执行会带来停顿时间更长的问题-XX:CMSFullGCsBeforeCompaction 设置执行多少次FullGC后对内存空间进行压缩整理-XX:ParallelCMSThreads 设置CMS的线程数量默认启动的线程数是(ParallelGCThreads3)/4ParallelGCThreads是年轻代并行收集器的线程数 如果想要最小化使用内存和并行开销选择Serial GC 如果最大化应用程序的吞吐量选择ParallelGC 如果想要最小化的GC的中断或停顿时间选择CMS GC 七、G1回收器区域化分代式 官方给G1设定的目标就是在延迟可控的情况下获得尽可能高的吞吐量所以才担当起全功能收集器的重任和期望 在JDK1.7版本正式启用jdk9以后默认垃圾回收器。JDK8还不是默认的需要用-XX:UseG1GC来启用 一Region Garbage First是一个并行回收器他把堆内存分割为很多不相关的区域Region物理上不连续使用不同的region表示Edens0s1老年代等。G1会跟踪各个region里面垃圾堆积的价值大小在后台维护一个优先列表每次根据允许的收集时间优先回收价值最大的Region 收集器能够对扮演不同角色的Region采用不同的策略去处理这样无论是新创建的对象还是已经存活了一段时间、熬过多次收集的旧对象都能获取很好的收集效果。 Region 中还有一类特殊的 Humongous 区域专门用来存储大对象。 G1 认为只要大小超过了一个 Region 容量一半的对象即可判定为大对象。每个 Region 的大小可以通过参数 -XX G1HeapRegionSize 设定取值范围为1MB 32MB 且应为 2 的 N 次幂。而对于那些超过了整个 Region 容量的超级大对象将会被存放在N 个连续的 Humongous Region 之中 G1 的大多数行为都把 Humongous Region 作为老年代的一部分来进行看待。 将Java堆分成多个独立Region后Region里面存在的跨Region引用对象如何解决 比如进行新生代垃圾回收时很有可能有老年代的对象指向新生代中的对象如果此时还需对老年代的对象进行一次扫描代价太高昂了。G1收集器使用记忆集来解决这个问题 二记忆集 每个region对应一个记忆集通过记忆集避免全局扫描。这些记忆集会记录下别的Region 指向自己的指针并标记这些指针分别在哪些卡页的范围之内。 每次引用类型数据写操作时会产生一个写屏障暂时中断操作。然后检查将要赋值的引用指向的对象是否和该引用对象类型数据在不同的region如果不同就通过CardTable把相关的引用信息记录到引用指向对象所在的Region对应的记忆集中 当进行垃圾收集时在GC根节点枚举范围加入记忆集就可以保证不进行全局扫描也不会有遗漏 三运行过程 如果我们不去计算用户线程运行过程中的动作如使用写屏障维护记忆集的操作 G1 收集器的 运作过程大致可划分为以下四个步骤 初始标记 Initial Marking 仅仅只是标记一下 GC Roots 能直接关联到的对象并且修改 TAMS 指针的值让下一阶段用户线程并发运行时能正确地在可用的Region 中分配新对象。这个阶段需要停顿线程但耗时很短而且是借用进行Minor GC 的时候同步完成的所以 G1 收集器在这个阶段实际并没有额外的停顿。 并发标记 Concurrent Marking 从 GC Root 开始对堆中对象进行可达性分析递归扫描整个堆里的对象图找出要回收的对象这阶段耗时较长但可与用户程序并发执行。当对象图扫描完成以后还要重新处理SATB记录下的在并发时有引用变动的对象。 最终标记 Final Marking 对用户线程做另一个短暂的暂停用于处理并发阶段结束后仍遗留 下来的最后那少量的 SATB 记录。 筛选回收 Live Data Counting and Evacuation 负责更新 Region 的统计数据对各个 Region 的回收价值和成本进行排序根据用户所期望的停顿时间来制定回收计划可以自由选择任意多个Region 构成回收集然后把决定回收的那一部分Region 的存活对象复制到空的 Region 中再清理掉整个旧Region的全部空间。这里的操作涉及存活对象的移动是必须暂停用户线程由多条收集器线程并行完成的 优势 并行与并发分代收集同时兼顾年轻代与老年代空间整合 region之间用复制算法整体可以看做是标记压缩算法。两种算法都避免内存碎片有利于程序长时间运行分配大对象不会因为无法找到连续空间提前触发下一次GC尤其当Java堆非常大的时候G1优势更加明显可预测的停顿时间模型 能让使用者明确指定在一个长度为M毫秒的时间片段内消耗在垃圾收集上的时间不能超过N毫秒 缺点 相较于CMSG1不具备全方位压倒性优势。比如用户程序运行中G1无论是为了垃圾收集产生的内存占用还是程序运行时的额外执行负载都要比CMS要高经验上来说小内存应用CMS表现大概率优于G1在大内存上G1优势发挥更多平衡点再6-8GB 参数设置 -XX:UseG1GC-XX:G1HeapRegionSize 设置每个Region大小值是2的幂范围是1MB到32MB之间目标是根据最小的Java堆划分出约2048个区域默认是堆内存的1/2000-XX:MaxGCPauseMillis 设置期望达到的最大GC停顿时间指标JVM尽力但不保证默认200ms-XX:ParallelGCThread 设置STW工作线程数的值最多设置8-XX:ConcGCThreads 设置并发标记的线程数将N设置为并行垃圾回收线程数parallelGCThreads的1/4左右-XX:InitiatingHeapOccupancyPercent 设置触发并发GC周期的Java堆占用率阈值超过此值就触发GC默认是45 G1提供了三种垃圾回收模式在不同的条件下触发 YoungGC当年轻代eden区用尽时MixedGCG1老年代回收器不需要整个老年代都被回收一次只需要扫描回收价值高的小部分老年代的region就可以了。同时这个老年代回收是和年轻代一起被回收的。FullGC当堆内存使用到一定值默认45% 八、垃圾回收器总结 九、GC日志分析 我们可以通过加以下参数输出GC日志然后进行分析
http://www.pierceye.com/news/831611/

相关文章:

  • 网站模块顺序调整网易对象存储wordpress
  • 深圳网络建设网站郑州网站优化服务
  • 辽阳专业建设网站公司网站html动态效果代码
  • 微信上可以做网站吗网页设计作业讲解
  • 长春好的做网站公司潍坊 网站
  • 做网站自己装服务器谷歌排名规则
  • 58.搜房等网站怎么做效果才好商贸公司企业简介模板
  • 中国最早做网站是谁卖网站怎样做
  • 张店专业网站优化哪家好书画工作室网站模板网站建设
  • 兰州网站制作怎么样青海哪家做网站的公司最大
  • 云龙湖旅游景区网站建设招标网站升级改版需要几天
  • 高端大气网络设计建设公司网站织梦模板沈阳模板建站哪家好
  • 郑州哪有做网站的高端网站建设与制作
  • 江阴网站网站建设蓝色 宽屏 网站 模板下载
  • 网站建设设计大作业重庆公共信息交易资源网
  • 做公司网站的多少钱公司建网站价格
  • 河间米各庄网站建设制作网站页面模板 建设中
  • wordpress首页添加站点统计小工具住房城乡建设部门门户网站
  • 网站建设在哪块做创业园网站建设
  • 郑州搭建网站公司互联网公司网站建设的目的
  • 响应式视频网站什么是权重高的网站
  • 做教育网站挣钱我的网站域名是什么
  • django 网站开发实例哪里可以检测胎儿性别
  • 刷排名凡搜网站宝微信5000人接推广费用
  • 网站优化外包服务专业网站建设服务商
  • 江西企业网站建设费用wordpress正在执行例行维护_请一分钟后回来.
  • 苏宁推客如何做网站创建一个网站的步骤
  • 优化网站广告优化东莞美食网站建设报价
  • 单页网站的营销定制应用软件有哪些
  • 如何建立一个网站详细步骤品牌建设可以从哪方面入手