java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

java jvm调优

我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才需要做我的智力进步!

感谢Attila-Mihaly给我提供了为其年度时事通讯Java Advent Calendar撰写帖子的机会,因此,对各种Java相关主题进行评论非常合适! 视频和文章的选择纯粹是随机的,并且基于我了解的顺序。 我隐藏的议程是主要通过他们来理解和扩展我自己的知识,同时与他人分享任何见解。

我将介绍Attila Szegedi(1个演讲)和Ben Evans(2个演讲)的三篇演讲评论。 他们谈论Java性能和GC的主题。 Attila的首次演讲涵盖了他在Twitter上担任工程师的丰富经验-因此,其大量信息来自生产系统领域的现场经验。 在他的演讲中,用薄物体代替胖物体是流行语之一。

Ben在他的两个演讲中深入讨论了性能,JVM和GC。 他指出了人们对性能,JVM和GC的误解,以及人们在生产中未启用某些运行时标志的事情。 基础机械如何工作,为什么以其工作方式工作,机械的效率如何,如何最好地做而不是为了从中获得好的吞吐量呢?

在这里,我附上我的评论,我决定从Attila Szegedi的演讲开始,因为我非常喜欢标题.....

演讲时的Attila在Twitter上工作,他从中学到了许多有关JVM和Java语言本身的内部知识– Twitter是一个组织,在其中进行调优,优化JVM,低延迟是事实。

他涵盖了有趣的主题,例如:

  • 延迟的贡献者
  • 完成的代码尚未准备好用于生产
  • 性能调整的区域(主要是内存调整和锁争用调整)
  • 内存占用调整(OOME,低效调整,FAT数据)
  • FAT数据-由他创造的新术语,以及如何解决由它产生的问题(非常深入和有趣)-了解有关Java / JVM语言中数据类型的字节分配。

这些建议之一(包括陷阱)是一些深入的潜水主题,例如压缩对象指针。 正如JVM分析器所揭示的那样,Scala 2.7.7中的某些类型效率很低。 不要使用Thrift –因为它不是低延迟的朋友,因为它们很沉重–每个对象增加52到72字节的开销,不支持32位浮点数,等等…注意线程局部变量–坚持使用并且使用了比预期更多的资源。

在表演三角上,Attila分享了他对这一概念的见识。 GC是JVM的最大威胁。 老一代使用ConcCollector,而新一代则通过STW流程,并争取了许多吞吐量和低暂停时间的收集器。

通过利用“自适应大小调整”策略来改进GC,并为其制定目标。 使用带有或不带有自适应策略的吞吐量收集器,并对结果进行基准测试。 他带领我们完成了各种-XX:+ Print ...标志,并解释了其用法。 保持碎片少并避免GC完全停止。 有关GC工作原理的详细信息,以及如何改进GC(调整新旧基因)。

与GC不相关的延迟–线程协调优化。 当使用线程来改善延迟时,可以使用屏障和半屏障;在使用Atomic值和AtomicReferences时,可以使用一些技巧。 Cassandra平板分配器–帮助提高效率和性能–无需编写自己的内存管理器。 Attila不再是“软参考”的粉丝–尽管理论上很棒,但实际上却不行,但需要更多的GC周期来清除它们!

结论:

经常了解您的代码,这可能是导致问题的根源-框架可能多次成为性能问题的原因。 如果人们知道如何最好地利用开发环境的数据结构的基本构建块,则可以做很多事情来降低所编写程序的性能。 要保持最佳的吞吐量并从JVM中获得最佳性能,这是一项艰巨的任务。

-建议观看视频,内容比上面的摘要要多得多-

Ben在本文中介绍了有关Java,其性能,GC等的古老神话和假设……涉及的领域包括:

1) Java速度很慢; 2)单行Java意味着任何孤立的事物; 3)微型基准意味着您认为它可以做什么,
4)算法缓慢是造成性能问题的最常见原因; 5)缓存解决了所有问题; 6)所有应用都需要关注世界停止状态; 7)手动滚动对象池适用于各种应用, 8) CMS总是比Parallel Old,GC更好的选择GC )9)增加堆大小将解决您的内存问题

  • 在许多情况下,JIT编译的代码与C ++一样快
  • JIT编译器甚至可以在分析数据的基础上优化掉无效和未使用的代码。 在JRockit之类的JVM中,JIT可以分解对象操作。
  • 为了获得最佳结果,请不要过早优化,而要纠正性能热点。
  • 理查德·费曼(Richard Feynman)曾经说过:“第一个原则是,您不能欺骗自己-并且您是最容易欺骗的人” –在考虑编写Java微基准测试时要牢记的一点。

人们对Java的想法是观点,但与事实相反。 基本上是建议群众重新审视思想,根据纯粹的事实而不是假设或旧的信念做出结论。

  • 与算法相比,GC,数据库访问,配置错误等都可能导致应用程序运行缓慢。
  • 测量,不要猜测! 使用经验生产数据来发现性能问题的真正原因。
  • 不要只是添加缓存以将问题重定向到其他地方并增加系统的复杂性,而是要收集基本使用情况统计信息(未命中率,命中率等)以证明缓存层确实在增加价值。
  • 如果用户没有抱怨,或者您不在低延迟堆栈中,则不必担心STOP-THE-WORLD暂停(大约200毫秒,具体取决于堆大小)。
  • 对象池非常困难,只有在GC暂停不可接受且调优和重构的智能尝试无法将暂停降低到可接受的水平时才应使用对象池。
  • 检查CMS是否是正确的GC策略,首先应确定Parallel Old的STW暂停是不可接受的,无法进行调整。 Ben强调要确保所有指标都是在等同于生产的系统上获得的
  • 在更改堆大小或调整其他参数之前,了解对象分配和生存期的动态至关重要。 不加估量行事会使事情变得更糟。 来自垃圾收集器的权属分配信息在这里尤为重要。

结论:

由GC子系统具有用于调谐和用于产生数据,以指导调谐,然后使用一个工具来分析日志令人难以置信的潜力-无论是手写脚本和某些图形的产生,或作为(开源)的可视化工具,例如GCViewer 或商业产品

人们对GC的理解有误解或不足。 它不仅是Mark&Sweep。 如今,许多运行时都具有GC! 两种思想流派– GC和参考计数! 与需要高精度的机器相比,人类会犯错误。 True GC是Java率先开发的,效率极高,引用计数非常昂贵。

分配列表是所有对象都源自的列表。 在不停止应用程序的情况下,您无法在正在运行的实时应用程序的任何给定时间点上获得运行对象的所有对象的准确图片,这就是我们拥有STW(停止世界)的原因!

GC的黄金法则

  • 必须收集所有垃圾(敏感规则)
  • 绝不能收集活物

(绝招:但是他们永远都不会平等)

热点是C / C ++ / Assembly应用程序。 堆是具有不同内存池(Young Gen,Old Gen和PermGen池)的连续内存块。 对象由应用程序(变量)线程创建,并由GC删除。 由于GC始终导致应用程序运行缓慢。

PermG –不理想,在Java 8中消失了(已知问题:导致OOME异常),被堆(本机内存)之外的Metaspace代替。

GC基于“弱世代假设”(即对象过早死亡或过时死亡),是通过经验研究发现的。

保有期限阈值是您移至“旧一代”(保有期限)之前可以生存的GC数量。 JavaFX与jdk7u6及更高版本捆绑在一起。

用Java编写的JavaFX Memory Visualizer的源代码取代了使用FlexML(FXML)编写的Flash版本– https://github.com/kittylyst/jfx-mem 。 关于如何用一种不错的编程语言FlexML编写程序的广泛解释–将构建器模式与类似DSL的表达式结合使用。 该程序模拟了GC的工作方式以及如何在不同的池中创建,销毁和移动对象。

强制性标志列表,对性能没有任何影响

  • 详细:gc
  • Xloggc:<路径文件>
  • XX:+ PrintGCDetails
  • XX:+ PrintTenuringDistribution

上面记录了有关正在执行的应用程序和GC的所有信息。 还介绍了基本的堆大小调整标志。 自从JDK的最新版本以来,将堆标志设置为相等就不再适用。 另外,GC和VM有200多个标志,其中不包括所有未记录的标志。

GC日志文件对于后处理很有用,但有时记录不正确。 MXBeans会影响正在运行的应用程序,但不会提供比日志文件更多的信息。

GC日志文件具有通用格式,可提供有关分配更改,占用率,任期信息,收集信息等信息的信息– GC日志文件格式的爆炸性增长,并且工具不多。 许多免费工具涵盖了某种仪表板,例如显示各种与GC相关的指标的输出,而商业版本通常具有更好的方法和有用的信息。 过早推广 –在创建新对象的压力下,对象直接从YG移到OG,而无需经过Survivor空间。

使用工具,进行测量,不要猜测!

结论:

了解事实并找出细节(如果不知道但不要猜测或假设)。 错误的概念有时会导致假设和对JVM和GC进程的错误理解。 不要只是更改标志或使用工具,不知道为什么以及它们做什么。 例如,打开GC日志记录(启用了适当的标志)不会对JVM的性能产生明显影响,但从中长期来看是一个福音。

—强烈建议您观看视频,其内容比上面的提要要多,Ben以一种最简单的方式解释了GC,其中涵盖了许多重要的细节—

由于查看所有此类视频和文章不切实际,因此在下面的链接中提供了许多视频和文章以供进一步研究。 在许多情况下,我已经解释或直接引用了作者为保留信息和希望传达的意思而不得不说的话。 此博客文章的后续内容将出现在标题为(第2部分,共3部分)的同一空格处 2013年12月19日 有关性能优化,JVM,Java中的GC,Mechanical Sympathy等的文章和视频的摘要

有用的资源

  • 是您的GC日志对您说话吗,G1GC版– 幻灯片 – 视频
  • Java应用程序性能调优的原理
  • 表演特殊兴趣小组讨论 –由Richard Warburton主持 (视频)
  • 缓存: @RichardWarburto提供的“更有效地理解,衡量和使用CPU缓存” (视频和幻灯片)
  • 关于原子I / O操作的文章(Linux)
  • 有关Azul Zing,低延迟GC和OpenJDK的文章和演示文稿 (视频和幻灯片)
  • Martin Thompson的无锁算法实现终极性能
  • Performance Java用户小组–“面向希望将系统推向新高度的专业Java开发人员”
  • 优化Google的仓库规模计算机:NUMA体验 – Univ的作者。 Cal(SD)和Google的资料!
  • MegaPipe:多位作者的可扩展网络I / O的新编程接口 !
  • 每个程序员应该了解的关于内存的知识Ulrich Drepper
  • 内存壁垒:针对软件黑客的硬件视图 – Paul E. McKenney(Linux技术中心– IBM Beaverton)
  • Vanilla #Java了解Core Java的真正工作原理可以帮助您编写更简单,更快的应用程序 ,作者Peter Lawrey
  • 通过Kirk Pepperdine 调整线程池的大小

参考:( 第1部分,共3部分): Java出现日历博客上来自JCG合作伙伴 Mani Sarkar的有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要 。

翻译自: https://www.javacodegeeks.com/2013/12/part-1-of-3-synopsis-of-articles-videos-on-performance-tuning-jvm-gc-in-java-mechanical-sympathy-et-al.html

java jvm调优

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

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

相关文章

数学猜想验证步骤_高中数学解题思路与技巧汇总,19种解题方法,实用!

解数学题&#xff0c;除了掌握有关的数学知识之外&#xff0c;最好掌握一定的解题技巧甚至知道点解题思想。要知道高考试题的解答过程中蕴含着重要的数学思想方法&#xff0c;如果能有意识地在解题过程中加以运用&#xff0c;势必会取得很好的效用。下面邦德华纳整理了19种数学…

【渝粤题库】广东开放大学 标准化专业英语 形成性考核

选择题 题目&#xff1a; Generally speaking, IEC Publications are bilingual in English and ____. 题目&#xff1a; The topic of Unit 3 is ______. 题目&#xff1a; The IEC produces ____ categories of publications. 题目&#xff1a; The international consens…

衡量网络性能的四大指标:带宽、时延、抖动、丢包

一 带宽 1、带宽概念&#xff1a; 带宽在百度百科中定义&#xff1a;在单位时间内从网络中的某一点到另一点所能通过的**“最高数据率”**。 计算机网络的带宽是指网络可通过的最高数据率&#xff0c;即每秒多少比特&#xff08;常用的单位是bps(bit per second)&#xff09…

【渝粤题库】广东开放大学 劳动关系理论与实务 形成性考核

选择题 题目&#xff1a;在20世纪上半叶出现的标志着现代社会保障制度从社会保险制度向综合性社会保障制度转变的法律是() 题目&#xff1a;由工人组成的旨在维护并改善其工作条件的连续性组织是() 题目&#xff1a;早期工业化时代劳动关系的表现形式是() 题目&#xff1a;认为…

kuka机器人焊接飞溅大_库卡机器人KCP4示教器屏幕校准方法

库卡于1898年在德国奥格堡成立&#xff0c;是世界几家顶级工业机器人制造商之一&#xff0c;1973年公司研发的FAMULUS第一台工业机器人诞生。库卡机器人公司在全球拥有20 多个子公司&#xff0c;涵盖了美国、墨西哥、巴西、日本、韩国、中国、台湾、印度和绝大多数欧洲国家。库…

【渝粤题库】广东开放大学 学前教育学 形成性考核

&#x1f449;关注我,看答案&#x1f448; 选择题 题目&#xff1a;1919 年陈鹤琴提出了“活教育理论”&#xff0c;指出学前教育十大原则&#xff0c;下列不属于其原则范围的是&#xff08; &#xff09;。 题目&#xff1a;五四运动之后&#xff0c;我国的学前教育原则强调“…

使用Spock 1.2简化对遗留应用程序的集成测试

了解如何利用Spock 1.2切片传统应用程序的Spring上下文&#xff0c;编写集成测试。 您是否曾经想过&#xff0c;要开始使用一些遗留应用程序&#xff0c;编写一些测试以了解正在发生的事情&#xff0c;并可能收到有关回归的通知&#xff1f; 当您想实例化单个类时&#xff0c;这…

Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全

切记&#xff1a;以上方法均会对注册表进行修改&#xff0c;一定要先备份整个注册表&#xff0c;以防万一&#xff0c;避免导致系统错误 一、问题症状或错误复现&#xff1a; 1、首先要打开 文件资源管理器的 文件 预览窗格 2、然后在文件资源管理器的右边就会显示预览窗格…

【渝粤题库】广东开放大学 建筑材料 形成性考核 (2)

选择题 题目&#xff1a;材料吸水后&#xff0c;将使材料的&#xff08; &#xff09;提高 题目&#xff1a;水附于憎水性&#xff08;或疏水性&#xff09;材料表面上时&#xff0c;其润湿边角为&#xff08; &#xff09; 题目&#xff1a;某块体质量吸水率为18%&#xff0c;…

vue快速修改数组的某个值_详解vue组件三大核心概念

前言本文主要介绍属性、事件和插槽这三个vue基础概念、使用方法及其容易被忽略的一些重要细节。如果你阅读别人写的组件&#xff0c;也可以从这三个部分展开&#xff0c;它们可以帮助你快速了解一个组件的所有功能。本文的代码请猛戳github博客&#xff0c;纸上得来终觉浅&…

“有源传感器”和“无源传感器”

什么是“有源传感器”和“无源传感器”&#xff1f; 有源传感器 将非电能量转化为电能量&#xff0c;只转化能量本身&#xff0c;并不转化能量信号的传感器&#xff0c;称为有源传感器。也称为能量转换性传感器或换能器。 常常配合有电压测量电路和放大器,如压电式,热电式,磁…

【渝粤题库】广东开放大学 汉语基础 形成性考核

选择题 题目&#xff1a; 普通话里&#xff0c;“迂”、“衣”、“乌”的不同&#xff0c;主要是&#xff08; &#xff09;的不同。 选择一项&#xff1a; 题目&#xff1a; 普通话里&#xff0c;短语“一朵鲜花儿”的读音包含&#xff08; &#xff09;个音节。 题目&…

根据id获取多维数组路径_程序员的进阶课-架构师之路(2)-数组

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/m0_37609579/article/details/99355842 从这一节开始&#xff0c;我们就要正式进去数据结构的世界了…

【渝粤题库】广东开放大学 组织行为学 形成性考核

选择题 题目&#xff1a;()人的特征是&#xff1a;智慧敏捷&#xff0c;缺乏准确性&#xff1b;热情&#xff0c;但急躁易冲动&#xff1b;刚强&#xff0c;但易粗暴。 题目&#xff1a;知觉是人脑对直接作用于感觉器官的客观事物个别属性的反映。 题目&#xff1a;组织也叫社会…

机理与机制的含义与区别

机理 机理&#xff08;mechanism&#xff09;&#xff0c;是指事物变化的理由与道理&#xff0c;从机理的概念分析&#xff0c;机理包括形成要素和形成要素之间的关系两个方面。其原理是指为实现某一特定功能&#xff0c;一定的系统结构中各要素的内在工作方式以及诸要素在一定…

guava和commons_使用Guava CharMatcher和Apache Commons Lang StringUtils确定字符串中字符或整数的存在...

guava和commons最近Reddit上的帖子提出了一个问题&#xff1a;“ 是否存在一种预定义的方法来检查变量值是否包含特定字符或整数&#xff1f; ”基于问题的标题也被以另一种方式问到&#xff0c;“一种检查变量是否包含诸如列表之类的数字的方法或快速方法&#xff0c;例如或&a…

【渝粤题库】广东开放大学 财务会计(1) 形成性考核

选择题 题目&#xff1a;2012年12月初&#xff0c;某企业“坏账准备”科目贷方余额为6万元。12月31日&#xff0c;“应收账款”科目借方余额为100万元&#xff0c;经减值测试&#xff0c;该企业应收账款预计未来现金流量现值为95万元。该企业2012年末应计提的坏账准备金额为( …

python怎么把数据写进txt_python 如何将数据写入本地txt文本文件的实现方法

一、读写txt文件 1、打开txt文件 file_handle=open(1.txt,mode=w) 上述函数参数有(1.文件名,mode模式) mode模式有以下几种: #w 只能操作写入 r 只能读取 a 向文件追加 #w+ 可读可写 r+可读可写 a+可读可追加 #wb+写入进制数据 #w模式打开文件,如果而文件中有数据,再次写入…

工业互联网设备的网络安全管理与防护研究

从国家层面完善工业互联网设备的网络安全准入机制&#xff0c;建立设备网络安全检测认证体系&#xff0c;促进设备的网络安全架构研究和工程应用&#xff0c;强化设备的网络安全风险监测感知。 一、前言 工业互联网是新一代信息通信技术与工业体系融合的产物&#xff0c;做好…

反应式服务中的线程本地状态可用性

任何体系结构决策都需要权衡。 如果您决定采用反应式&#xff0c;也没有什么不同&#xff0c;例如&#xff0c;一方面使用反应式流实现几乎可以立即获得更好的资源利用率&#xff0c;但另一方面会使调试更加困难。 引入反应式库也对您的域产生巨大影响&#xff0c;您的域将不再…