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

眉山市网站建设_网站建设公司_HTTPS_seo优化

长治个人做网站,昆明网站的优化,查公司信息的网站是哪个网站,长沙微信营销公司[第一阶段]#xff1a;串行垃圾回收器#xff1a;jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器 [第二阶段]#xff1a;并行垃圾回收器#xff1a;随着多核的出现#xff0c;Java引入了并行垃圾回收器#xff0c;充分利用多核性能提升垃圾回收效率 [第三阶段]#xff1… [第一阶段]串行垃圾回收器jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器 [第二阶段]并行垃圾回收器随着多核的出现Java引入了并行垃圾回收器充分利用多核性能提升垃圾回收效率 [第三阶段]并发标记清理回收器CMS垃圾回收器可以和应用程序同时运行降低暂停用户线程执行的时间 [第四阶段]G1并发回收器初衷是在清理非常大的堆空间的时候能满足特定的暂停应用程序的时间与CMS相比会有更少的内存碎片 1 垃圾回收算法 1-1 标记清除算法 算法概述 优点回收速度快 缺点造成内存碎片无法分配大的连续空间。 算法思想 在Java9之前Java默认使用的垃圾回收器是ParallelGC从Java9开始G1作为了默认的垃圾回收器 step1: 第一次扫描通过GC root对象判断堆内存中哪些对象可以进行垃圾回收进行标记。 step2: 第二次扫描 将那些标记的GC root对象进行垃圾回收只需要将起始内存地址与终止内存地址放入空闲内存区就行。 1-2 标记整理算法 第一个依旧是标记第二步会进行一个空间整理从而不产生碎片。 优点避免了内存碎片 缺点对空间的整理使得效率比较低下。 1-3 复制算法 特点 将管理的内存分为2块区域from区域与to区域将那些不需要回收的对象从from区域拷贝到to区域。复制的过程中完成内存区域的整理。之后交换from和to的指向。 优点不会产生内存碎片 缺点需要双倍的内存空间内存利用率不高而且拷贝也需要时间。 1-4 三种垃圾回收算法总结 垃圾回收算法优点缺点标记清除算法(Mark Sweep)速度较快产生内存碎片标记整理算法(Mark Compact)没有内存碎片速度慢复制算法(Copy)没有内存碎片需要占用双倍内存空间 注意实际的JVM垃圾回收算法中上面的三种算法是综合使用的。 2 JVM分代回收算法 2-1 概述 Garden of Eden伊甸园 garbage:垃圾 新生代主要由三部分内容组成分别是Eden区幸存区from,幸存区to。 通常情况下只有Eden区与幸存区from会存放数目幸存区to只有垃圾回收时复制对象会用到。堆内存的新生代进行一次垃圾回收Minor GC大部分对象都会都会被回收。 老年代通常存放一些经常被使用的对象一个对象如果经历多次垃圾回收仍然幸存那么该对象会从新生代放入老年代。只有新生代内存不足并且老年代内存也不足的时候才会触发full GC对老年代的对象进行垃圾回收。 为什么需要进行划分 实际环境中对象的生命周期是不同的老年代的对象生命周期比较长可能很长时间才进行一次垃圾回收。新生代的对象生命周期比较短垃圾回收比较频繁。这种分区法方便采用不同的垃圾回收算法更加有效的进行垃圾回收。 2-2 分代垃圾回收示例 step1:程序刚刚开始运行产生的对象先放入Eden区当Eden区放不下的时候。 step2:对Eden区进行Minor GC,并将没有被垃圾回收的对象复制的幸存区To然后交换幸存区To和幸存区From,第一次垃圾回收的最终的效果如下图所示 step3: 第一次Minor GC, Eden区又有空间可以分配给新的对象使用经过一段时间Eden又不够用了触发第二次Minor GC, 这次垃圾会检查Eden区以及幸存区From哪些对象可以存活并将这些对象复制到幸存区To,然后交换幸存区To和幸存区From这个时候Eden区又空了出来可以放置新的对象。 实际垃圾回收过程中JVM会对每个对象经过垃圾回收幸存下来的次数进行记录比如上图中幸存区的2个对象经过垃圾回收的次数分别是1和2。 step4: 当一些对象经过垃圾回收的次数仍然幸存的次数达到一个阈值说明这个对象价值比较高那么这个对象会被移动到老年代。 极端情况考虑Eden区from区老年区都已经满了 此时会触发Full GC(优先Minor GC,Minor GC依旧内存不够) 2-3 分代垃圾回收的总结 对象首先分配在伊甸园区域 新生代空间不足时触发 minor gc伊甸园和 from 存活的对象使用 copy复制到 to 中存活的 对象年龄加 1并且交换from tominor gc 会引发stop the world暂停其它用户的线程等垃圾回收结束用户线程才恢复运行 暂停时间较短由于新生代大部分对象都是垃圾复制的对象很少所以效率较高当对象寿命超过阈值时会晋升至老年代最大寿命是154bit对象头存储当老年代空间不足会先尝试触发 minor gc如果之后空间仍不足那么触发full gcSTW的时 间更长Full GC 的stop the world的时间要比MInor GC时间长老年代存活对象较多加上空间整理时间所以停止时间会较长。 如果Full GC后空间仍然不足会触发内存不足的异常。 2-4 垃圾回收相关的虚拟机参数 垃圾回收器概述 参数含义参数备注堆初始大小-Xms堆最大大小-Xmx 或 -XX:MaxHeapSizesize 新生代大小-Xmn 或 (-XX:NewSizesize -XX:MaxNewSizesize )NewSize是初始大小MaxNewSize是最大大小。幸存区比例动态-XX:InitialSurvivorRatioratio 和 -XX:UseAdaptiveSizePolicy幸存区的比例默认是8假设新生代10M内存8M划分给Eden区剩下的二等分一份from,一份to。幸存区比例-XX:SurvivorRatioratio动态调整幸存区比例晋升阈值 -XX:MaxTenuringThresholdthreshold用于动态调整幸存区比例晋升详情 -XX:PrintTenuringDistribution用于动态调整幸存区比例GC详情 -XX:PrintGCDetails -verbose:gc打印详情信息FullGC 前 MinorGC -XX:ScavengeBeforeFullGC默认在Full GC 前进行一次Minor GC 2-5 垃圾回收案例分析 情况1什么都不放的情况 new generation新生代 tenured generation老年代 package cn.itcast.jvm.t2; import java.util.ArrayList; /*** 演示内存的分配策略*/ public class Demo2_1 {private static final int _512KB 512 * 1024;private static final int _1MB 1024 * 1024;private static final int _6MB 6 * 1024 * 1024;private static final int _7MB 7 * 1024 * 1024;private static final int _8MB 8 * 1024 * 1024; //加入Java开发交流君样756584822一起吹水聊天// -Xms20M -Xmx20M -Xmn10M : 堆初始与最大大小都是20M新生代的大小为10M.// -XX:UseSerialGC 为了学习方便采用这个垃圾回收器默认的垃圾回收器并不是这个。// -XX:PrintGCDetails -verbose:gc 打印详细信息// -XX:-ScavengeBeforeFullGC 在Full GC 前进行 Minor GC.public static void main(String[] args) throws InterruptedException {new Thread(() - {ArrayListbyte[] list new ArrayList();list.add(new byte[_8MB]);list.add(new byte[_8MB]);}).start();System.out.println(sleep....);Thread.sleep(1000L);} }情况1执行结果 可以看到即使用户没有创建对象系统对象也要占据一部分堆内存空间。 Heapdef new generation total 9216K, used 2341K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000) // 新生代的空间总的大小为9216K,这里没有把To空间给计算进去系统任务To的空间是分配是不可用的所以不是10M,已经使用了2341K[]内部则是内存地址范围。 eden space 8192K, 28% used [0x00000000fec00000, 0x00000000fee49420, 0x00000000ff400000) // from space 1024K, 0% used [0x00000000ff400000, 0x00000000ff400000, 0x00000000ff500000)to space 1024K, 0% used [0x00000000ff500000, 0x00000000ff500000, 0x00000000ff600000)tenured generation total 10240K, used 0K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000) // 老年代大小为10M可以看到没有任何空间使用 //加入Java开发交流君样756584822一起吹水聊天 the space 10240K, 0% used [0x00000000ff600000, 0x00000000ff600000, 0x00000000ff600200, 0x0000000100000000)Metaspace used 3394K, capacity 4496K, committed 4864K, reserved 1056768Kclass space used 378K, capacity 388K, committed 512K, reserved 1048576KJava的内存对象都是分配在堆上吗 情况2新生代堆空间放满触发GC public static void main(String[] args) throws InterruptedException {ArrayListbyte[] list new ArrayList();list.add(new byte[_7MB]); // 系统类占用2341K加上new的7MB触发垃圾回收}情况2执行结果 [GC (Allocation Failure) [DefNew: 2342K-696K(9216K), 0.0029193 secs] 2342K-696K(19456K), 0.0029867 secs] [Times: user0.00 sys0.00, real0.00 secs] // GC:minor GC(新生代垃圾回收) FUll GC (老年代垃圾回收) // [Times: user0.00 sys0.00, real0.00 secs] 垃圾回收执行时间 Heapdef new generation total 9216K, used 8110K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)eden space 8192K, 90% used [0x00000000fec00000, 0x00000000ff33d8c0, 0x00000000ff400000)from space 1024K, 67% used [0x00000000ff500000, 0x00000000ff5ae100, 0x00000000ff600000)to space 1024K, 0% used [0x00000000ff400000, 0x00000000ff400000, 0x00000000ff500000)tenured generation total 10240K, used 0K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)the space 10240K, 0% used [0x00000000ff600000, 0x00000000ff600000, 0x00000000ff600200, 0x0000000100000000)Metaspace used 3539K, capacity 4536K, committed 4864K, reserved 1056768K//加入Java开发交流君样756584822一起吹水聊天class space used 395K, capacity 428K, committed 512K, reserved 1048576K情况三: 新生代内存随着对象的增多放不下了 public static void main(String[] args) throws InterruptedException {ArrayListbyte[] list new ArrayList();list.add(new byte[_7MB]);list.add(new byte[_512KB]);list.add(new byte[_512KB]);}执行结果 新生代放不下将新生代的对象放置到老年代。 [GC (Allocation Failure) [DefNew: 2342K-670K(9216K), 0.0022591 secs] 2342K-670K(19456K), 0.0023131 secs] [Times: user0.02 sys0.00, real0.00 secs] [GC (Allocation Failure) [DefNew: 8678K-538K(9216K), 0.0061246 secs] 8678K-8354K(19456K), 0.0061637 secs] [Times: user0.00 sys0.00, real0.01 secs] Heapdef new generation total 9216K, used 1132K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)eden space 8192K, 7% used [0x00000000fec00000, 0x00000000fec94930, 0x00000000ff400000)from space 1024K, 52% used [0x00000000ff400000, 0x00000000ff486a00, 0x00000000ff500000)to space 1024K, 0% used [0x00000000ff500000, 0x00000000ff500000, 0x00000000ff600000)tenured generation total 10240K, used 7815K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)the space 10240K, 76% used [0x00000000ff600000, 0x00000000ffda1f80, 0x00000000ffda2000, 0x0000000100000000)Metaspace used 3539K, capacity 4536K, committed 4864K, reserved 1056768K//加入Java开发交流君样756584822一起吹水聊天class space used 395K, capacity 428K, committed 512K, reserveed 1048576K情况四一开始直接分配大于新生代的内存如果老年代放的下则直接放到老年代 public static void main(String[] args) throws InterruptedException {ArrayListbyte[] list new ArrayList();list.add(new byte[_8MB]);}执行结果 Heap //加入Java开发交流君样756584822一起吹水聊天def new generation total 9216K, used 2507K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)eden space 8192K, 30% used [0x00000000fec00000, 0x00000000fee72ca8, 0x00000000ff400000)from space 1024K, 0% used [0x00000000ff400000, 0x00000000ff400000, 0x00000000ff500000)to space 1024K, 0% used [0x00000000ff500000, 0x00000000ff500000, 0x00000000ff600000)tenured generation total 10240K, used 8192K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)the space 10240K, 80% used [0x00000000ff600000, 0x00000000ffe00010, 0x00000000ffe00200, 0x0000000100000000)Metaspace used 3539K, capacity 4536K, committed 4864K, reserved 1056768Kclass space used 395K, capacity 428K, committed 512K, reserved 1048576K总结 当内存比较紧张的时候即新生代内存放不下的时候有时候会直接将对象分配到老年代或者直接在回收次数较少(未达到15次)的情况下直接将新生代对象弄到老年代。【资料获取】 2 垃圾回收器 2-1 垃圾回收器概述 名称特点适合场景目标新生代老年代串行垃圾回收器单线程堆内存小适合个人电脑cpu个数采用复制的垃圾回收算法采用标记整理的垃圾回收算法吞吐量优先垃圾回收器多线程堆内存大多核CPU并行让单位时间内STW的时间最短复制算法标记拷贝响应时间优先的垃圾回收器简称CMS多线程堆内存大多核CPU并发尽可能让单次STW最短复制算法标记清除算法产生内存碎片需要退化成单线程的垃圾整理回收器 CMS垃圾回收器后来被G1垃圾回收器取代。 2-2 串行垃圾回收器 开启串行垃圾回收器的JVM参数 -XX:UseSerialGC Serial SerialOld // Serial工作在新生代采用复制的垃圾回收算法 // SerialOld:工作在老生代采用标记整理的垃圾回收算法总结触发垃圾回收时让多个线程在一个安全点停下来然后使用单线程的垃圾回收器去进行垃圾回收垃圾回收完成后再让其他线程运行。 2-3 吞吐量优先的垃圾回收器 开启吞吐量优先的垃圾回收器的JVM参数 开启/关闭的参数 默认的多线程垃圾回收器前者是开启新生代回收器采用复制算法后者是开启老年代回收器采用标记拷贝算法。下面选项只要开启一个那么另外一个也会开启。 -XX:UseParallelGC , -XX:UseParallelOldGC 开启自适应动态调整新生代的大小晋升阈值 -XX:UseAdaptiveSizePolicy 二个指标调整的参数ParallelGC会根据设定的指标去调整堆的大小到达下面期望设定的目标 指标11/1ratio 垃圾回收的时间/总的运行时间 ratio默认值时99即垃圾回收的时间不超过总时间1%。但一般设为19 如果达不到目标ParallelGC会调整堆内存大小来达到这个目标通常是调大这样垃圾回收的次数会减少从而提高吞吐量 -XX:GCTimeRatioratio 指标2每次垃圾回收的时间限制 最大暂停的毫秒数 默认值是200ms 显然将堆内存空间变小有助于减少每次垃圾回收的时间 -XX:MaxGCPauseMillisms 总结显然指标1与指标2是有冲突的。 -XX:ParallelGCThreadsn //垃圾回收并行的线程数目 总结采用多线程方式进行垃圾回收垃圾回收的线程数目通常根据CPU的核数进行设置。在垃圾回收阶段并行的垃圾回收线程会充分占用CPU。在非垃圾回收阶段用户线程会充分利用CPU资源。 2-4 响应时间优先的垃圾回收器CMS垃圾回收器 缺点采用的标记清除算法产生内存碎片需要退化成单线程的垃圾整理回收器造成响应时间变长。 开启的JVM参数 注意这个是并发的采用标记清除算法的垃圾回收这里区别于之前的垃圾回收器该垃圾回收器能够在进行垃圾回收的同时运行其他非垃圾回收线程也存在时间阶段需要停止但不是所有阶段停止。 老年代并发的垃圾回收器会出现失败的情况这时老年代垃圾回收器会退化成单线程的垃圾回收器(SerialOld) -XX:UseConcMarkSweepGC // use concurrent mark sweep会产生垃圾碎片 工作在老年代的垃圾回收器 -XX:UseParNewGC // 工作在新生代的垃圾回收器 //加入Java开发交流君样756584822一起吹水聊天重要的初始参数 -XX:ParallelGCThreadsn // 并行的垃圾回收线程数通常等于CPU的核心数垃圾回收并行阶段 -XX:ConcGCThreadsthreads // 并发的线程数目通常设为并行垃圾回收线程数的1/4垃圾回收并发阶段其他参数 -XX:CMSInitiatingOccupancyFractionpercent // 执行垃圾回收的内存占比预留空间给浮动垃圾 -XX:CMSScavengeBeforeRemark // 在重新标记前对新生代进行垃圾回收减少并发清理的垃圾对象开启-关闭浮动垃圾是指并发清理过程中用户线程新产生的垃圾需要等待下次并发清理。 并发工作流程概述 step1:老年代发生内存不存的现象。step2:ConcMarkSweepGC会进行一个初始标记动作初始标记需要STW即阻塞非垃圾回收线程初始标记只标记根对象所以速度非常快暂停时间也非常短。step3:完成初始标记后之前阻塞的线程又可以运行了这个时候垃圾回收线程进行并发标记。step4:并发标记结束后需要再次阻塞非垃圾回收线程进行一个所谓的重新标记step5:重新标记完成后阻塞的线程又可以运行了。垃圾回收线程也并发的清理垃圾对象。 总结初始标记与重新标记需要阻塞线程。 在并发阶段由于垃圾回收线程占用资源所以系统的吞吐量会受到一定的影响但是系统的响应速度由于并发执行不会受到垃圾回收的明显影响(相比较其他垃圾回收器STW时间只需要进行初始标记与重新标记并且能够不阻塞其他线程进行垃圾的标记与清除)。 最后祝大家早日学有所成拿到满意offer
http://www.lebaoying.cn/news/112807.html

相关文章:

  • wordpress调用标签优化二十条
  • 网站关键词推广企业wordpress内存不足
  • 洛江区建设局网站公司网站模板 网盘下载
  • 爱站seo工具包官网成都十大广告公司
  • 二级网站建设 知乎怎么建网站卖东西
  • 怎么自己制作个网站wordpress 实用主题
  • 建设网站要点一个空间两个网站对seo
  • php企业网站开发教程手机网站宽度自适应
  • 大连建设工程招聘信息网站网站不备案不能访问
  • 万网有网站建设吗网站设计的性能需求
  • 昆明网站免费制作长治门户网
  • ppt免费制作网站深圳互联网推广公司
  • 农村网站建设补助兰州中川国际机场三期
  • 关于对网站建设工作情况的通报网站应该怎么建设
  • 平顶山城市建设局网站咪呜瀑布流WordPress模板
  • 北京建设招聘信息网站wordpress友链自定义排序
  • 黄岛网站建设网站建设准备工作
  • seo网站优化做什么网站seo化自己可以吗
  • 简述网站建设的作用隐私页 wordpress
  • 成都科技网站建设费铁岭做网站公司哪家好
  • 大庆企业做网站西安建设工程交易中心网站
  • 网站性能t恤定制网站哪个好
  • 扬州网站建设多少钱惠州建设局网站首页
  • 如何做适合手机访问的网站做网站的工资
  • 企业网站的建设公司价格建站技术知识
  • 地方网站做的好的网站开发保密协议范本下载
  • 传奇怎么建设自己的网站南昌外贸网站设计
  • 网站在线支付接口申请青柠影院观看免费高清电视剧
  • 西安建网站价格低惠州seo网站管理
  • 北京免费自己制作网站域名怎么创建网站