您认为有关垃圾收集的7件事-完全错了

关于Java垃圾收集的最大误解是什么,它的真实情况如何?

小时候,我的父母曾经告诉我,如果我学习不好,我将成为垃圾收集者。 他们所知道的很少,垃圾回收实际上很棒。 也许这就是为什么即使在Java世界中,许多开发人员也会误解GC算法:它们如何工作,GC如何影响其应用程序以及您可以对此做些什么。 这就是为什么我们求助 Java性能调优专家Haim Yadid并将Java性能调优指南放到Takipi博客上的原因。

新帖:关于垃圾回收的7件事您以为您知道-完全错了http://t.co/3QJLJuKCRq pic.twitter.com/aqQEF0zTkK

— Takipi(@takipid) 2015年4月6日

出于对性能调整指南的兴趣,在此后续文章中,我们决定收集一些有关垃圾回收的流行观点,并向您展示为什么它们是完全错误的。 以下是前7名:

1.只有一个垃圾收集器

不,并且4也不是正确的答案。 HotSpot JVM总共有4个垃圾收集器: 串行,并行/吞吐量。 CMS,并在块G1上新建一个孩子 。 但是,还有更多,还有非标准的垃圾收集器,还有更多冒险的实现,例如Shenandoah或其他JVM使用的收集器(例如C4, Azul的不间断收集器)。 HotSpot的默认值是并行/吞吐量收集器,通常这不是您的应用程序的最佳选择。 例如,CMS和G1收集器将导致较少的GC暂停。 但是当出现暂停时,其持续时间很可能会比Parallel收集器引起的持续时间更长。 另一方面,对于相同大小的堆,并行收集器通常可实现更高的吞吐量。

总结:根据您的要求选择合适的垃圾收集器:可接受的GC暂停频率和持续时间。

2.并行=并发

垃圾回收周期可以是STW(世界停止运行)并导致GC暂停,也可以并发执行而无需停止应用程序。 当我们更进一步时,GC算法本身可以是串行(单线程)或并行(多线程)的。 这就是为什么当我们提到并发GC时,它不一定意味着它是并行完成的;反之,当我们提到串行GC时,它并不一定意味着它会引起暂停。 在垃圾回收世界中,Concurrent和Parallel是两个绝对不同的术语,其中Concurrent是指GC周期,而Parallel是指GC算法本身。

要点:垃圾回收是一个两步游戏,调用GC周期的方式及其进行业务的方式是两件不同的事情。

3. G1解决了所有问题

G1收集器是Java 7中引入的,并且经过了许多更改和修改,是JVM垃圾收集器的最新添加。 主要优点是,它解决了CMS收集器常见的碎片问题:GC循环释放旧一代的内存,使之看起来像瑞士奶酪,直到片刻JVM无法处理并不得不停止并停止运行。处理碎片。 但这还不是故事的结局,在某些情况下其他收藏家的表现可能优于G1。 这完全取决于您的要求。

要点:没有所有GC问题的奇迹解决方案,需要进行实验以帮助您为JVM选择正确的收集器。

4.平均交易时间是最重要的指标

如果仅监视服务器中的平均交易时间,那么您会错过异常值。 人们对系统用户的破坏性知之甚少。 例如,通常需要100毫秒以下的事务可能会受到GC暂停的影响,并且需要一分钟才能完成。 如果您只查看平均交易时间,那么除了用户以外的任何人都不会注意到。 现在,针对1%或以上的用户考虑这种情况,您会发现仅查看平均值时,容易被忽略的情况。 有关与延迟相关的更多问题以及解决方法,请点击此处查看Gil Tene的博客。

要点:密切注意异常值,了解系统在第99个百分位数( 不是1% )上的表现。

5.降低新的对象分配率将改善GC行为

我们可以将系统中的对象大致分为三类:长期存在的对象,通常对它们我们无能为力,导致最大问题的中期存在的对象,以及通常会被释放并长期释放的短暂存在的对象分配Swift,因此它们在下一个GC周期中就消失了。 中度对象是那些注重其分配率可以带来积极结果的对象。 集中精力于短期和长期的对象通常不会被证明是有效的,而控制中等寿命的对象通常是一项艰巨的任务。

要点:并不是唯一的对象分配速率会限制您的服务器,而是造成所有麻烦的对象类型。

6.调整可以解决所有问题

如果您的应用程序需要保持经常更改的大型状态,那么调整JVM的堆并不会带来太多好处。 GC长时间停顿是不可避免的。 可以在体系结构更改方面提出解决方案,在此方面,要确保具有影响响应时间的关键过程/瓶颈的流程不会包含大状态。 大型状态和响应能力不能很好地结合在一起:将其分解为不同的流程将是解决之道。

总结:并非所有问题都可以通过调整JVM标志来解决,有时您只需要回到绘图板上即可。

7. GC日志会导致大量开销

这是完全不正确的,尤其是默认的日志设置。 数据非常有价值,并且Java 7引入了挂钩来控制它们的大小,并确保它们不会用完您的所有硬盘驱动器。 如果您不收集GC日志数据,那么您将失去了解JVM垃圾回收在生产中的行为的唯一途径。 可接受的GC开销通常有5%的上限,要知道系统会暂停什么样的收费GC并采取最小化措施,这是一个微不足道的代价。

总结:竭尽所能,在生产中从系统中获取最多的数据。 那里是一个完全不同的世界。

结论

我们希望这些内容能帮助您更好地理解垃圾回收在Java中的实际工作方式。 您是否在应用程序中认识到其中一些问题? 您是否发现其他常见的垃圾回收错误? 在下面的评论部分让我们知道。

翻译自: https://www.javacodegeeks.com/2015/04/7-things-you-thought-you-knew-about-garbage-collection-and-are-totally-wrong.html

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

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

相关文章

java $p_javap -c命令详解

一直在学习Java,碰到了很多问题,碰到了很多关于i和i的难题,以及最经典的String str "abc" 共创建了几个对象的疑难杂症。 知道有一日知道了java的反汇编 命令 javap。现将学习记录做一小结,以供自己以后翻看。如果有错误的地方&a…

hibernate 映射四多对一双向映射

学生和班级的例子来说,多个学生可以对应一个班级。 1.站在学生角度来说,学生就是多端。那么我们可以通过多对一来维护2者的关系。 2.站在班级的角度来说,班级就是一端。那么我们可以通过一对多啦维护2者的关系。 3.我们也可以双向关联两者的关…

JS factory

http://my.oschina.net/jbryan/blog/140647转载于:https://www.cnblogs.com/zhongqiu/p/3472472.html

django mysql 表单_Python Django 表单提交数据到mysql并展示

首先1: 新建项目userproject, 新建应用childName2: 这是childName文件目录,templates文件夹放insert.html 与 show.html3: insert.html 与 show.html/**insert.html**/用户登录12345678910111213141516Title信息展示用…

java h5 上拉加载更多_移动端H5页面上拉加载更多功能实现(二)

之前已经写过一篇关于上拉加载更多的文章,那个主要是根据滚动实现分页向后台发起请求实现。这次实现方式为后台返回所有需要加载的数据,前端这边做视觉上的分页效果。实现原理也是根据滚动距离触发加载更多的条件。我这边的需求是需要在模态框里实现一个…

体验最火的敏捷——SCRUM(厦门,2014.1.4)

1.概述SCRUM是当前最火的一种敏捷开发方法,有用户故事、冲刺、燃尽图等很多很酷的玩法,有牛B的产品负责人、SCRUM Master,有超强的自组织团队。本沙龙将为您展现当前最火最酷的敏捷开发方法!内容大纲:1)SCRUM是神马东西…

摆脱困境:将属性值注入配置Bean

Spring Framework对将从属性文件中找到的属性值注入到bean或Configuration类中提供了很好的支持。 但是,如果将单个属性值注入这些类中,则会遇到一些问题。 这篇博客文章指出了这些问题,并描述了我们如何解决它们。 让我们开始吧。 如果使…

js编码java解码_js编码

虽然escape()、encodeURI()、encodeURIComponent()三种方法都能对一些影响URL完整性的特殊字符进行过滤。但后两者是将字符串转换为UTF-8的方式来传输,解决了页面编码不一至导致的乱码问题。例如:发送页与接受页的编码格式(Charset)不一致(假设发送页面是…

淘宝IP地址查询

官方网址:http://ip.taobao.com/index.php 相关文章: http://www.cnblogs.com/zetee/p/3482085.html http://www.cnblogs.com/zetee/p/3481297.html转载于:https://www.cnblogs.com/AloneSword/p/3483176.html

mysql查询各专业人数_查询各专业的学生数。

【简答题】查询“数据库”不及格的学生的学号和成绩。【判断题】螺位错可以攀移。【单选题】Internet 的核心协议是()【单选题】多媒体计算机是指()【单选题】码组10100与10001之间的码距为( )。【简答题】查询选修了“计算机基础”课程的学生学号和成绩。【单选题】小强用数码…

[SharePoint][SharePoint2013循序渐进]SPS2013简介

本章概要: 1、啥是SPS2013 2、SharePoint如何作用于团队协作和信息共享 3、SP2013有哪些用户权限 4、什么是SharePoint2013 online 5、SP在内部署和在线订阅计划的区别 6、office集成 7、与Microsoft Dynamics AX集成提供一个web前端界面 【什么是SharePoint2013】 …

python怎么改目录_如何查看文件,而不是使用Python进行更改的目录?

问题:How do I watch a file for changes using Python?建议使用看门狗,但我发现它只能观看目录,而不是文件.watchdog-test.py是看门狗的示例脚本:$python watchdog-test.py ab_test_res.sh &[1] 30628fbtfbt64:~/laike9m$Traceback (most recent c…

javascript arguments

此文为转载文章: 什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的。所有主要的js函数库都利用了arguments对象。所以agruments对象对于javascript程序员来说是必需熟悉的…

hutool 自定义excel_Hutool Java 工具类库导出 Excel,超级简单!

前言在开发应用系统的时候,导出文件是必不可放的功能。以前用过POI、easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用。今天给大家介绍一款新工具,java工具类库Hutool。Hutool简介Hutool…

带头结点头部插入创建链表

/*创建一个带头结点的链表&#xff0c;头部插入法创建*/ #include<stdio.h> #include<stdlib.h>#define DataType chartypedef struct node {DataType data;struct node *next; }ListNode,*LinkList;/*创建一个带头结点的链表*/ LinkList createLinkList() {char c…

Java性能调优:充分利用垃圾收集器

JVM背后发生了什么&#xff0c;垃圾回收如何影响Java性能&#xff1f; 性能调优世界是一个危险的地方&#xff0c;一个JVM标志失衡&#xff0c;事情很快就会变得繁琐。 因此 &#xff0c;我们决定求助于Java性能调优专家&#xff0c; 单调 JVM探查器mjprof的创建者Haim Yadid …

[单选]物联网产业链的主要产品不包括下列哪一项 - 关于物联网(主讲:柳毅)笔记...

[单选]物联网产业链的主要产品不包括下列哪一项 转载于:https://www.cnblogs.com/scgw/p/3488452.html

java web读取excel_JavaWeb使用POI操作Excel文件实例

1.为项目添加POI点进去之后下载(上边的是编译好的类&#xff0c;下边的是源代码)解压文件夹&#xff0c;把下面三个文件复制到WebComtent>WEB-INF>lib文件夹下再把这三个文件复制到Tomcat的lib文件夹下&#xff0c;否则Tomcat会因为找不到类而报错(这个地方郁闷了一上午)…

架构大型企业Java项目–我的虚拟JUG会话

昨天我很荣幸被邀请参加虚拟JUG 。 这是一个很大的荣誉&#xff0c;其原因有很多&#xff1a;首先&#xff0c;我是vJUG董事会的一员&#xff0c;其次&#xff0c;因为这是我第二次向这个对Java感兴趣的伟大团队做演讲。 被邀请回来总是很高兴的。 架构大型企业Java项目 过去&…

javascript操作cookie

1. 什么是cookie&#xff1f; Cookie就是浏览器保存在计算机上面的一下信息。一般是保存用户登录状态&#xff0c;就是说Cookie会保存用户登录某个网站的信息在本地&#xff0c;下次这个用户访问网站的时候会自动取出他的Cookie信息&#xff0c;方便定制用户想要的内容。2. 实例…