安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

如何选择最好的Java垃圾回收器

2月2日 斩情道投稿
  垃圾收集(GC)在许多现代编程语言中执行动态内存管理。对于开发人员来说,复杂的垃圾收集减轻了担心内存管理的负担。
  本文比较了Java垃圾收集器,并解释了如何使用应用程序的吞吐量、延迟和占用空间要求来选择适合您需要的合适的垃圾收集器。
  选择垃圾收集器
  应用程序在定义和使用变量时动态分配和释放内存。在Java中,JVM从操作系统分配内存,并在每次请求新变量时将其提供给应用程序。在一个或多个后台线程中运行的垃圾收集确定应用程序仍引用内存的哪些部分,并回收未引用的内存以供应用程序重用。
  Java提供了许多垃圾收集器来满足不同的应用程序需求。为您的应用程序选择合适的垃圾收集器主要影响其性能。基本标准是:吞吐量:有用的应用程序活动所花费的总时间与内存分配和垃圾收集的百分比。例如,如果您的吞吐量为95,这意味着应用程序代码在95的时间内运行,而垃圾收集在5的时间内运行。您希望为任何高负载业务应用程序提供更高的吞吐量。延迟:应用程序响应能力,受垃圾收集暂停的影响。在与人或某个活动进程(例如工厂中的阀门)交互的任何应用程序中,您都希望尽可能降低延迟。足迹:进程的工作集,以存储空间和缓存来衡量。
  不同的用户和应用程序有不同的要求。有些人想要更高的吞吐量并可以承受更长的交换延迟,而其他人则需要低延迟,因为即使非常短的暂停时间也会对他们的用户体验产生负面影响。在物理内存有限或有许多进程的系统上,占用空间可能决定了可扩展性。在接下来的部分中,我们将使用这些应用程序要求来讨论和比较以下垃圾收集器:SerialcollectorParallelcollectorGarbagefirst(G1)collectorZcollectorShenandoahcollectorConcurrentMarkSweep(CMS)collector(deprecated)串行收集器Serialcollector
  这个垃圾收集器在一个线程上执行它的所有工作。使用单个线程可以提高效率,因为多个线程之间没有通信开销。
  串行收集器最适合单处理器机器,因为多处理器机器可以从多线程中受益。对于具有小数据集的应用程序,也可以在多处理器机器上使用串行收集器。对于可以容忍暂停并创建非常小的堆的应用程序,此收集器可能是最佳选择。
  串行收集器是分代垃圾收集器。如本系列的第1部分所述,一代是一组年龄相似的对象。分代垃圾收集器将所有对象的集合分成几代,并在一次传递中收集一个或多个代中的所有对象。
  启用串行收集器:XX:UseSerialGC
  在某些硬件和操作系统配置上默认选择串行收集器,您可以使用以下命令显式启用收集器XX:UseSerialGC编译器选项。并行收集器Parallelcollector
  并行收集器也称为吞吐量收集器,因为当吞吐量比延迟更重要时,它通常是最佳选择。当可以接受长时间的暂停时,您可以使用并行收集器,例如批量数据处理、批处理作业等。
  并行收集器与串行收集器一样,是一种分代垃圾收集器。它们之间的主要区别在于并行收集器运行多个线程来加速垃圾收集。
  如果应用程序要求实现最高吞吐量并且可以接受一秒或更长时间的暂停,则并行收集器可能是合适的。并行收集器可用于具有在多处理器或多线程机器上运行的大中型数据集的应用程序。
  启用并行收集器:XX:UseParallelGC
  使用XX:UseParallelGC选项以启用此收集器。并行收集器还允许您通过其他编译器选项配置其多个参数:XX:ParallelGCThreadsn指定垃圾收集器线程的数量。XX:MaxGCPauseMillisn指定最大暂停时间的目标(以毫秒为单位)。默认情况下,暂停时间没有限制,但使用此选项,暂停时间为n预计或更少毫秒。XX:GCTimeRation有助于实现应用程序的吞吐量目标。此选项以1(1设置用于垃圾收集的时间量n)的比率。例如,XX:GCTimeRatio24将目标设置为125,因此总时间的4用于垃圾收集。默认值为99,这会导致1的时间花在垃圾收集上。垃圾优先(G1)收集器
  G1是为具有大量内存的多处理器机器设计的服务器式收集器。收集器试图实现高吞吐量和短暂停时间,同时需要很少的调整。在某些硬件和操作系统上默认选择G1,并且可以通过XX:UseG1GC选项。
  G1被称为主要并发收集器,因为它与应用程序同时执行一些昂贵的工作。G1也是一个区域化和分代垃圾收集器,这意味着堆被划分为多个大小相等的区域。启动时,JVM会设置区域大小,根据堆大小的不同,区域大小从1MB到32MB不等。目标是不超过2048个区域。Eden、survivor和oldgeneration(在描述本系列的第1部分中)是这些区域的逻辑集合,并且不连续。
  G1收集器可以为满足以下一项或多项标准的应用程序实现高吞吐量和低延迟:大堆大小:具体来说,超过6GB,其中超过50被活动对象占用。在应用程序运行期间,垃圾收集代之间的分配和提升率可能会有很大差异。堆中有大量碎片。需要将暂停限制在几百毫秒内。
  字符串重复数据删除:XX:UseStringDeduplication
  从JDK8update20开始,G1收集器通过提供了另一种优化字符串重复数据删除,这可以将应用程序的堆使用量减少约10。这XX:UseStringDeduplication编译器选项会导致G1收集器查找重复字符串并在对重复项执行垃圾收集时保留对一个字符串的单个活动引用。目前没有其他Java垃圾收集器支持字符串重复数据删除。
  我建议您在测试环境中使用这些选项运行您的应用程序,以查看它们是否实现了内存使用量的减少,然后在生产中启用这些选项。
  额外的G1编译器选项
  以下是与G1收集器相关的选项摘要:XX:UseG1GC启用G1垃圾收集器。XX:UseStringDeduplication启用字符串重复数据删除。XX:PrintStringDeduplicationStatistics如果使用上一个选项运行,则打印详细的重复统计信息。XX:StringDeduplicationAgeThresholdn导致达到的年龄的字符串对象n个垃圾回收周期被视为重复数据删除的候选对象。默认值为3。
  欲了解更多关于G1垃圾收集器,请参阅介绍G1垃圾回收和收集和阅读G1垃圾收集日志。您还可以阅读G1收集器调优以获取G1性能改进建议。Z垃圾收集器(ZGC)
  ZGC是一种低延迟垃圾收集器,适用于非常大(数TB)的堆。与G1一样,ZGC与应用程序同时工作。ZGC是并发、单代、基于区域、NUMA感知和压缩。它不会停止应用线程的执行超过10毫秒。
  此收集器适用于需要非常短暂停时间的具有大量内存的应用程序。Z垃圾收集器作为一项实验性功能提供,并通过XX:UnlockExperimentalVMOptionsXX:UseZGC命令行选项。
  使用ZGC时,设置最大堆大小非常重要,因为收集器的行为取决于分配率差异和数据集的活跃程度。ZGC在更大的堆上工作得更好,但浪费不必要的内存也是低效的,因此您需要调整内存使用和可用于垃圾收集的资源之间的平衡。Shenandoah收集器
  Shenandoah是另一个暂停时间很短的垃圾收集器。它通过与应用程序同时执行更多垃圾收集工作来减少暂停时间,包括并发压缩。Shenandoah的暂停时间与堆大小无关。垃圾收集2GB堆或200GB堆应该有类似的短暂停行为。
  Shenandoah最适合需要响应性和短暂停时间的应用程序,而不管堆大小要求。您可以通过XX:UseShenandoahGC编译器选项。并发标记扫描收集器(已弃用)
  ConcurrentMarkSweep(CMS)收集器自JDK9起已被弃用(在两个JDK增强提案JEP291和JEP363中进行了讨论),建议改用G1收集器。
  该CMS收集器已经优选的,这需要很短的垃圾收集暂停时间和可与垃圾收集器共享处理器资源的应用程序运行时的应用程序。当长寿命年老代很高并且应用程序在具有两个或更多可用处理器的机器上运行时,此收集器提供更多好处。CMS收集器可以通过XX:UseConcMarkSweepGC编译器选项。
  CMS是一个分代垃圾收集器,收集老年代。通过与应用程序线程同时执行垃圾收集(特别是标记和清除操作),它可以确保应用程序中的暂停时间较短。但是,如果CMS收集器无法在老年代填满之前清除未引用的对象,或者如果对象分配不能满足老年代的可用空间,CMS将停止所有应用程序线程执行垃圾收集。CMS垃圾收集器无法并发完成垃圾收集的状态称为并发模式失败,这表明的重要性调整CMS收集器参数。
  当CMS抛出OutOfMemoryError时
  如果超过98的应用程序总时间花在垃圾收集上,而在连续五个垃圾收集周期中回收的堆不到2,则CMS会抛出一个OutOfMemoryError错误。此功能旨在防止应用程序长时间运行而由于堆太小而进展甚微或没有进展。如果需要,您可以通过添加选项来禁用错误XX:UseGCOverheadLimit到命令行。
  CMS已被弃用,以加速中其他垃圾收集器的开发HotSpot。消除CMS将减轻GC代码库的维护负担并加速新的开发。因此,通过使用CMSXX:UseConcMarkSweepGCJDK9中的选项会导致以下警告消息:JavaHotSpot(TM)64BitServerVMwarning:IgnoringoptionUseConcMarkSweepGC;supportwasremovedinversion
  从长远来看,G1垃圾收集器旨在替代ConcurrentMarkSweep收集器的大多数用途。较新的Z和Shenandoah收集器也可以与最新的JDK而不是CMS一起使用。如果这些收集器都不能满足您的应用程序要求,您仍然可以使用并发标记扫描,只要它在早期版本中仍然受支持。结论
  选择正确的垃圾收集器在很大程度上取决于您的应用程序的要求及其行为。本文根据吞吐量、延迟和占用空间对比了六种Java垃圾收集器。您可以使用此信息来选择最适合您的应用程序的垃圾收集器。有许多垃圾收集器可用,因此您需要在对预期的生产负载进行适当测试后做出选择。
投诉 评论

亚马逊被爆逃避无人机坠毁事故调查,理由是预约牙医财经网科技5月19日讯,据凤凰网科技消息,文件显示,亚马逊自动无人机送货项目PrimeAir曾多次试图推迟联邦政府对无人机坠毁事故的调查。一份坠机报告显示,美国联邦航空管……一图带你重新认识Voliate关键字java讨论区并发编程哈喽,大家好,我是小浪。好久没更新Java技术文了,有点抱歉哈。可能平时分享生活更多一点〔打脸〕Java中几个关键字是就那么几个,……酷炫的游戏仓库希捷酷玩极光侠移动硬盘游戏玩家一直以来都是各类硬件厂商的宠儿,针对他们应用需求的产品层出不穷。目前此类产品已经不光局限在显卡、键鼠、显示器等常规意义上与游戏体验息息相关的硬件,连移动硬盘也有为游戏玩……年末换新机?2021年多款旗舰机开始清仓,带你正确捡漏好手机2021年进入尾声,多款旗舰机开始清仓,想买旗舰手机的小伙伴可以考虑以下三款手机。第一款:华为P50Pro华为P50Pro分为两款处理器,麒麟9000和骁龙888,……我爱拼多多女生最喜欢玩的游戏是什么?购物!!!拆快递属于最快乐的时光,可以让人暂时忘记所有的烦恼。买买买最治愈。可是,对于经济能力有限,尤其是像我这样,近一年来收入水平腰斩,创收前景也不……中英美三国换机统计报告正式出炉这类人换新机速度最快国际知名研究机构StrategyAnalytics,近日发布了一份报告《赢取智能手机市场的换机用户》。这个报告主要针对中国、英国和美国开展了一次智能手机消费者调研,从而调查出驱……砍价总差0。09!律师起诉拼多多,回应来了近日,因砍价免费拿未成功,律师起诉拼多多一事,引发热议。4月6日,拼多多客户服务对此表示,本期砍价免费拿活动真实,已送出709万件。砍价免费拿始终差0。09律……40岁,在五线城市是选择当律师还是老师,请大家帮忙分析一下?做自己擅长的事,不要跟风,五线城市应该节奏不是太快,这两种职业应该都有好市场。在五线城市没有一定的资源千万不要当律师,律师都跟法院法官有千丝万缕的联系的。首先,五线……苹果怂了,以后iphone买东西便宜30这么多年过去,安卓党和苹果党之间的争论,就一直没有停过。很多人喜欢安卓手机,是因为价格合适系统开放,搞机老司机还能玩出花来。而对于青睐苹果的人来说,iPhone能折……如何选择最好的Java垃圾回收器垃圾收集(GC)在许多现代编程语言中执行动态内存管理。对于开发人员来说,复杂的垃圾收集减轻了担心内存管理的负担。本文比较了Java垃圾收集器,并解释了如何使用应用程序的吞……特斯拉设计总监现在苹果产品没什么好期待的了2月10日消息,据国外媒体报道,斯拉设计总监弗朗茨冯霍尔茨豪森(FranzvonHolzhausen)近日在接受采访时对苹果和苹果产品做出评论,表示:对未来苹果产品没什么好期待……1500元以内有能用35年的手机推荐吗?平常不玩游戏,预算在1500元以内,选个什么手机比较好呢?这个价位段一般定位中低端,然后你希望可以用个35年,你换机频率不高,首先手机内存至少应该要128G吧,其次处理器肯定需……
数据复制软件企业英方软件回复科创板首轮问询,数据合规性备受关城市环境所在气溶胶遥感研究中取得进展拉好友帮退押金?欠千万用户押金的ofo又耍啥花招一个从业四年的人,说说对跨境电商的看法OPPO退烧手机壳大火,降温原理公开了德生最便宜的中波收音机M10型当今人类认知最少同时也最无法最不情愿去探索的领域是什么?realme真我Q3Pro狂欢版发布搭载高通骁龙768G,售有没有什么能降低获客成本的方法?华为芯片短缺,国产机谁将主导高端市场华为nova8SE4G版悄悄发布,中芯国际14nm芯片,支持三星GalaxyZFold3正式发布外观亮眼我们都要活在当下资兴焦电科技创新按下企业快进键怎么用邮箱查微信聊天记录(怎么查询微信的聊天记录)教育必须重视文化投入暑假生活不一样的暑假分手后,十二星座的自愈能力有多强?关注员工离职成本降低员工离职率女生热门的刘海发型人气网红刘海发型时尚又吸睛野菜创始人俞永福创业需要跨的九道坎年空军招飞工作开始专访空军负责人奶奶对我真好

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利