教育行业手机wap网站,查房价的官方网站,淘宝客优惠券网站怎么做的,手机网站制作解决方案JAVA虚拟机JVM优化重要性#xff0c;昨天JAVA虚拟机JVM参数优化(1)文章中已经描述#xff0c;今天我们来讨论JAVA虚拟机在不同性能要求下如何选择三种垃圾收集算法。JVM内部结构如下图所示#xff1a;串行收集用于单个线程执行垃圾收集的情况#xff0c;在这种情况下相对它…JAVA虚拟机JVM优化重要性昨天JAVA虚拟机JVM参数优化(1)文章中已经描述今天我们来讨论JAVA虚拟机在不同性能要求下如何选择三种垃圾收集算法。JVM内部结构如下图所示串行收集用于单个线程执行垃圾收集的情况在这种情况下相对它是有效的因为它不需要和其他线程进行通讯。它适用于单个处理器机器或者在多处理器情况下数据量小于100MB。串行收集通过参数 -XX:UseSerialGC声明工作。并行收集通过并行较小的收集来降低整个垃圾收集周期。中等或者大型数据量的应用运行在多处理和多线程建议采用并行收集它通过参数-XX:UseParallelGC声明工作。并行压缩是允许并行收集器并行执行主要集合的功能。如果不进行并行压缩则使用单个线程执行主要集合这会显著限制可伸缩性。如果指定了-xx:useParallelGC选项则默认情况下启用并行压缩。关闭它的选项是-xx:-UseParallelOldGC。大多数并发收集器同时执行其大部分工作(例如当应用程序仍在运行时)以缩短垃圾收集暂停时间。它是为具有中型到大型数据集的应用程序设计的在这些数据集中响应时间比总吞吐量更重要通过用于最小化暂停的技术会降低应用程序性能。Java热点VM提供了两个主要并行收集器之间的选择参见大多数并发收集器。使用选项-xx:UseConcMarkSweepGC启用CMS收集器或-xx:UseG1GC启用g1收集器。选择收集器除非应用程序有相当严格的暂停时间要求否则首先运行应用程序并允许VM选择一个收集器。如有必要请调整堆大小以提高性能。如果性能仍然不符合您的目标那么使用以下准则作为选择收集器的起点。如果应用程序有一个小的数据集(高达大约100 MB)则使用选项-xx:UseSerialGC选择串行收集器。如果应用程序将在单个处理器上运行并且没有暂停时间要求那么让虚拟机选择收集器或者使用选项-xx:UseSerialGC选择串行收集器。如果(a)应用程序性能峰值是第一优先级并且(b)没有暂停时间要求或者可以接受1秒或更长的暂停那么让虚拟机选择收集器或者使用-xx:useParallelGC选择并行收集器。如果响应时间比总吞吐量更重要并且垃圾收集暂停时间必须保持短于约1秒则使用-xx:useConcMarkSweepgc或-xx:UseG1GC选择并发收集器。这些准则仅为选择收集器提供了一个起点因为性能取决于堆的大小、应用程序维护的活动数据量以及可用处理器的数量和速度。暂停时间对这些因素特别敏感因此前面提到的1秒阈值只是近似值在许多数据大小和硬件组合上并行收集器将经历超过1秒的暂停时间相反在某些组合上并发收集器可能无法保持低于1秒的暂停时间。如果推荐的收集器没有达到所需的性能请首先尝试调整堆和生成大小以满足所需的目标。如果性能仍然不足请尝试其他收集器使用并发收集器减少暂停时间并使用并行收集器增加多处理器硬件上的总吞吐量。SPEC JBB2015MULTI测试结果分析选取SPEC JBB2015MULTI测试结果中Java HotSpot 64-bit Server VMversion 1.8.0_131厂商报告Cisco思科、DELL戴尔、H3C华三、HP、Inspur浪潮、Levovo联想、Quanta台湾广达。我们选取每个厂商中得分最高的测试结果并且按使用堆内存数量大小升序排如下所示。Inspur Corporation Inspur NF5280M4 256GB/29GB 39635-server -XX:LargePageSizeInBytes2m -XX:AggressiveOpts -XX:-UseAdaptiveSizePolicy -XX:AlwaysPreTouch -XX:-UseBiasedLocking -XX:UseLargePages -XX:UseParallelOldGC -Xms29g -Xmx29g -Xmn27g -XX:SurvivorRatio28 -XX:TargetSurvivorRatio95 -XX:ParallelGCThreads22 -XX:MaxTenuringThreshold15 -XX:PrintTenuringDistribution -XX:PrintGCDetails -XX:PrintGCTimeStampsQuanta Computer Inc. QuantaGrid D52B-2U 384GB/30GB 40874-showversion -server -XX:UseLargePages -XX:LargePageSizeInBytes2m -XX:AggressiveOpts -XX:-UseAdaptiveSizePolicy -XX:AlwaysPreTouch -XX:-UseBiasedLocking -XX:UseParallelOldGC -XX:SurvivorRatio28 -XX:TargetSurvivorRatio95 -XX:MaxTenuringThreshold15 -Xms30g -Xmx30g -Xmn27g -XX:ParallelGCThreads28PowerEdge R640 786GB/180GB 69059-showversion -server -XX:AlwaysPreTouch -XX:UseParallelOldGC -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold15 -XX:PrintTenuringDistribution -XX:-UseBiasedLocking -XX:AggressiveOpts -XX:UseLargePages -XX:LargePageSizeInBytes2m -XX:SurvivorRatio26 -XX:TargetSurvivorRatio95 -Xms180g -Xmx180g -Xmn178g -XX:ParallelGCThreads28 -XX:PrintGCDetails -XX:PrintGCTimeStampsLenovo Global Technology ThinkSystem SR650 768GB/350GB 114309-server -Xms350g -Xmx350g -Xmn340g -XX:SurvivorRatio40 -XX:MaxTenuringThreshold15 -XX:UseLargePages -XX:LargePageSizeInBytes2m -XX:UseParallelOldGC -Xnoclassgc -XX:AggressiveOpts -XX:AlwaysPreTouch -XX:-UseAdaptiveSizePolicy -XX:-UsePerfData -XX:TargetSurvivorRatio98 -XX:ParallelGCThreads56 -XX:-UseBiasedLocking -verbose:gc -XX:PrintGCDetails -XX:PrintGCDateStampsH3C UniServer R4900 G3 1536GB/710GB 120287-XX:UseParallelOldGC -Xms710g -Xmx710g -Xmn690g -XX:-UsePerfData -server -XX:AllocatePrefetchInstr2 -XX:LargePageSizeInBytes2m -XX:AggressiveOpts -XX:-UseAdaptiveSizePolicy -XX:AlwaysPreTouch -XX:-UseBiasedLocking -XX:MaxMetaspaceSize256m -XX:MetaspaceSize256m -XX:UseLargePages -XX:SurvivorRatio48 -XX:TargetSurvivorRatio90 -XX:ParallelGCThreads56 -XX:MaxTenuringThreshold15Hewlett Packard Enterprise ProLiant DL380 Gen10 1536GB/735GB 117090-XX:-UsePerfData -server -XX:AllocatePrefetchInstr2 -XX:LargePageSizeInBytes2m -XX:AggressiveOpts -XX:-UseAdaptiveSizePolicy -XX:AlwaysPreTouch -XX:-UseBiasedLocking -XX:MaxMetaspaceSize256m -XX:MetaspaceSize256m -XX:UseLargePages -XX:UseParallelOldGC -Xms735g -Xmx735g -Xmn681g -XX:SurvivorRatio68 -XX:TargetSurvivorRatio48 -XX:ParallelGCThreads56 -XX:MaxTenuringThreshold15 -XX:PrintTenuringDistribution -XX:PrintGCDetails -XX:PrintGCTimeStamps -XX:UseRTMLocking -XX:InlineSmallCode10k -XX:MaxGCPauseMillis300Cisco UCS C240 M5 1536GB/710GB jOPS:118551-XX:UseParallelOldGC -Xms710g -Xmx710g -Xmn690g -XX:-UsePerfData -server -XX:AllocatePrefetchInstr2 -XX:LargePageSizeInBytes2m -XX:AggressiveOpts -XX:-UseAdaptiveSizePolicy -XX:AlwaysPreTouch -XX:-UseBiasedLocking -XX:MaxMetaspaceSize256m -XX:MetaspaceSize256m -XX:UseLargePages -XX:SurvivorRatio48 -XX:TargetSurvivorRatio90 -XX:ParallelGCThreads56 -XX:MaxTenuringThreshold15从上面数据可以得知SPEC JBB2015都是为了达到吞吐量最大化再优化响应时间性能因此所有厂商都不约而同选择了-server 默认并行收集同时关闭默认并行压缩算法开启-XX:UseParallelOldGC垃圾收集并行线程数-XX:ParallelGCThreads 设置为服务器总核数 56 28加快并行收集效率在堆划分-XX:-UseAdaptiveSizePolicy 采用系统自动适应策略-XX:SurvivorRatio28 48 尽可能把堆留给年轻对象-XX:MaxTenuringThreshold15对象被计数15次才会分配到老年-XX:TargetSurvivorRatio95测试机器都普遍内存多因此都使用了XX:UseLargePages -XX:LargePageSizeInBytes2m 优化大内存另外-XX:AggressiveOpts -XX:AlwaysPreTouch -XX:-UseBiasedLocking这3个指令所有厂商也都不约而同使用HP惠普还使用-XX:MaxGCPauseMillis300参数限制最大一次垃圾收集停顿时间。总结JVM调优中最重要还是堆内存的准确预估可以通过JVM监控来掌握选择并行垃圾收集普通情况下优于其他串行和并发收集。通过SPEC测试分析可以了解JVM并行收集影响性能最重要的参数大部分厂商使用的参数基本相同。文章参考