减少主要GC暂停的频率

尺寸标签
这篇文章将讨论一种技术,以减少应用程序等待时间造成的垃圾收集暂停的负担。 正如我几年前所写, 在JVM中无法禁用垃圾收集 。 但是,有一个巧妙的技巧可以用来大大减少长时间停顿的时间和频率。

如您所知,JVM中发生了两个不同的GC事件,称为次要和主要集合。 关于这些收集期间发生的事情,有很多可用的材料,因此,我将不着重于详细描述其机制。 我只想提醒一下,在Hotspot JVM中-在次要收集期间,会收集eden和幸存者空间,在主要收集中,保管空间也会被清理和(可能)压缩。

如果打开GC日志记录(例如-XX:+ PrintGCDetails ),则会立即注意到主要集合是您应关注的集合。 一次大型垃圾收集的时间通常比一个清洁的年轻空间大几倍。 在大型GC中,有两个方面需要更多时间才能完成。 首先,年轻空间中的幸存者被复制到老地方。 接下来,除了清除旧版本中未使用的引用外,大多数GC算法还压缩了旧空间,再次需要消耗宝贵的CPU周期。

在旧空间中放置许多对象也增加了从旧空间到年轻空间的引用更多的可能性。 当检查这些表以确定年轻空间中的对象是否适合使用GC时,这将导致更大的卡片表 ,跟踪引用并增加次要GC暂停的时间。

因此,如果我们无法关闭垃圾收集,是否可以确保这些冗长的大型GC的运行频率降低,并且从使用权空间到Young的引用计数保持较低水平?

答案是肯定的。 甚至有一些疯狂的配置已完全摆脱了主要的GC。 摆脱主要的GC事件确实是一项复杂的工作,但是减少这些长时间停顿的频率是每个部署都可以实现的目标。

我们正在考虑的策略是限制使用期限的对象数量。 例如,在典型的Web应用程序中,创建的大多数对象仅在HttpRequest期间才有用。 存在并且将始终具有更长的寿命的共享状态,但是关键在于以下事实:短暂生存的对象与长期生存的共享状态的比率非常高。

现在进行任何部署的棘手部分是了解为短期对象提供多少肘部空间,以便

  • 您可以保证短期对象不会被提升为终身空间
  • 您不会过度配置,从而增加了基础架构的成本

从概念上讲,做到这一点很容易。 您只需要测量在请求期间为短期对象分配的内存量,并将其与峰值加载时间相乘即可。 您将要得到的结果是您想要在eden或单个幸存者空间中容纳的内存量。 这将使GC真正有效地运行,而不会意外升级为终身保有权。 从概念层面进行放大会发现一些复杂的技术问题,我将在以后的文章中介绍这些问题。

那么从这里可以得出什么结论呢? 首先-为您的应用程序确定理想的GC配置是一项复杂的工作。 这既是坏消息,也是好消息。 不好的是–它需要您进行大量的实验。 考虑到这一点,我们很乐意解决棘手的问题,目前正在制定实验以进一步研究该领域。 有朝一日,在不久的将来, Plumbr能够为您完成此任务,从而使您免于无聊的管道工作,并使您可以专注于手头的实际问题。

翻译自: https://www.javacodegeeks.com/2014/10/reducing-the-frequency-of-major-gc-pauses.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WAI-ARIA对自动完成小部件的支持

在本文中,我想讨论AutoComplete小部件的可访问性。 在您键入该字段时,通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中,我基于Twitter的Typeahead (一个灵活JavaScript库)实现了JSF组件,该库为…

eclipse中java.lang.OutOfMemoryError: Java heap space错误

Myeclipse中报java.lang.OutOfMemoryError: Java heap space错误 解决办法: 选中被运行的类,点击菜单‘run->run Configuration’,选择(x)Argument标签页下的vm arguments框里 输入 -Xmx800m, 保存运行。问题解决 转载于:https://www.cnblogs.com/vig…

[Vue warn]: Invalid prop: custom validator check failed for prop xxx.问题

在用vue ui框架&#xff08;iview、elementui等&#xff09;做项目&#xff0c;会遇到这种问题 这样的&#xff0c;点那都报错&#xff0c;千辛万苦的付出&#xff0c;却找不到问题在哪 其实很简单&#xff0c;报错都显示出那个组件的问题了 ‘<Form>’这个组件&#xf…

CheckList 如何梳理可减少上线的验证时间(总结篇)

对CheckList的执行发起的思考&#xff1f; &#xff08;1&#xff09;功能越来越多&#xff0c;CheckList越补充越多&#xff0c;执行CheckList时间越来越长&#xff0c;如何减少上线的验证时间&#xff1f;&#xff08;2&#xff09;减少上线验证的时间外&#xff0c;如何保证…

PrimeFaces 5.0 DataTable列切换器

我有机会与PrimeFaces 5.0 DataTable一起工作&#xff0c;并且增强功能很棒。 今天&#xff0c;我只想展示其中的一项新功能……DataTable列切换器。 此功能使您可以通过复选框列表选择显示哪些列。 要使用列切换器&#xff0c;只需添加一个commandButton即可将列选择的选择列…

使用JGit API探索Git内部

您是否想过提交及​​其内容如何存储在Git中&#xff1f; 好吧&#xff0c;我有&#xff0c;在上一个下雨的周末&#xff0c;我有一些空闲时间&#xff0c;所以我做了一些研究。 因为我对Java的感觉比对Bash的感觉要多&#xff0c;所以我使用了JGit和一些学习测试来探索提交的…

Html5 布局方式

在Html5之前&#xff0c;统一采用的是Div css的方式进行布局&#xff0c;但是却和开发人员的命名方式&#xff0c;喜好有关。在新的Html5中&#xff0c;布局却显得更加人性化&#xff0c;更易理解了。如增加了Header&#xff0c;Footer&#xff0c;Section&#xff0c;Aside标签…

PrimeFaces Mobile入门

介绍 如果您已经开发了利用PrimeFaces的应用程序&#xff0c;或者打算开发可在台式机和移动设备上使用的Web应用程序&#xff0c;请考虑将PrimeFaces Mobile用于您的移动实施。 这篇博客文章将介绍一些基础知识&#xff0c;以帮助您开始为现有的PrimeFaces应用程序开发移动界面…

attachEvent和addEventListener

attachEvent和addEventListener在前端开发过程中经常性的使用&#xff0c;他们都可以用来绑定脚本事件&#xff0c;取代在html中写 obj.οnclickmethod。相同点&#xff1a; 它们都是DOM对象的方法&#xff0c;可以实现一种事件绑定多个事件处理函数。 obj document.getElemen…

如果删除github上项目的文件

1. 你要有前面一章的开发平台和github插件&#xff0c;下面就是基于前面来做的。 如何删掉你github上的文件呢&#xff1f;想必你的电脑有一个下载的git工具了&#xff0c;如果还是没有的话&#xff0c;请用npm下载一个git。这是我已经下载好的。 2. 然后打开这个git&#xff…

在WildFly和OpenShift上的WebSocket聊天

聊天是解释WebSocket的最典型示例之一。 它是一个相当常用的界面&#xff0c;可以很容易地解释WebSocket的基本概念。 当然&#xff0c;Java EE 7 WebSocket也有一个&#xff0c; 在这里可用 &#xff01; 您可以使用以下步骤在WildFly上轻松运行它&#xff1a; curl -O http:…

Ubuntu20.04纯命令配置PCL(点云库)

Ubuntu20.04纯命令配置PCL&#xff08;点云库&#xff09; 最近在学习点云库&#xff08;PCL&#xff09;的使用&#xff0c;第一步就是在自己的电脑安装配置PCL。 首先&#xff0c;对于ubuntu 16.04以上版本&#xff0c;可以直接使用命令进行安装&#xff0c;新建好一个文件夹…

css html应用实例1:滑动门技术的简单实现

关于滑动门&#xff0c;现在的页面中好多地方都会用到滑动门&#xff0c;一般用作于导航背景&#xff0c;它的官方解释如下&#xff1a; 滑动门&#xff1a;根据文本自适应大小&#xff0c;根据背景的层叠性制作&#xff0c;并允许他们在彼此之上进行滑动&#xff0c;以创造出…

魔戒1

转载于:https://www.cnblogs.com/moonlightpeng/p/11240880.html

jQuery应用实例2:简单动画

效果&#xff1a; 代码&#xff1a; 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http://www.w3.org/1999/xhtml">3 <head>…

Spring Data JPA教程:简介

创建使用Java Persistence API的存储库是一个繁琐的过程&#xff0c;需要大量时间&#xff0c;并且需要大量样板代码。 通过执行以下步骤&#xff0c;我们可以消除一些样板代码&#xff1a; 创建一个抽象的基础存储库类&#xff0c;该类为实体提供CRUD操作。 创建扩展抽象基础…

对怀孕的人有害的食物。。。朋友们记住咯!(欢迎转载)

有几个同事和朋友要生BB啦&#xff0c;好东东&#xff0c;转给你们提前学习一下~ 容易流产食物&#xff1a; 1、螃蟹&#xff1a;它味道鲜美&#xff0c;但其性寒凉&#xff0c;有活血祛瘀之功&#xff0c;故对孕妇不利&#xff0c;尤其是蟹爪&#xff0c;有明显的堕胎作用。 2…

Vss服务端用户存在,但客户端登陆不进去

打开客户端Vss提示“Cannot find SS.INI file for user userName”,这个错误是找不到用户userName的SS.INI文件。 解决办法 在服务器上找到Vss共享的文件夹&#xff0c;打开此文件夹下的users文件夹&#xff0c;然后找到userName文件夹打开后&#xff1a; 如果没有SS.INI文件&a…

Red Hat Enterprise 5 server 上安装 memcached 的问题记录

国内私募机构九鼎控股打造APP&#xff0c;来就送 20元现金领取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html内部邀请码&#xff1a;C8E245J &#xff08;不写邀请码&#xff0c;没有现金送&#xff09;国内私募机构九鼎控股打造&#xff0c;九鼎投资是在全国股份…

Java扩展机制可加载所有JAR

Java扩展机制在Java教程中被描述为“一种标准的&#xff0c;可伸缩的方式&#xff0c;以使自定义API可供Java平台上运行的所有应用程序使用。” 如了解扩展类加载中所述 &#xff0c;“扩展框架利用类加载委托机制”&#xff0c;其中扩展类在rt.jar &#xff08;和相关的JAR&am…