曾经遇到过性能问题吗? 我也是。 如果我的经理再喊一次“ faaaaster”,我一生都会有听力障碍。 顺便说一句,我能听到所有声音中的德语发音吗? ;-)

您可以相信仍然有人无知地在谈论垃圾收集器(得到它吗?)和JVM的性能。

……我将再次返回C语言,因此我不必担心性能……

*叹*

JVM一直在不断改进其收集器算法,并且每个发行版中都将高度复杂的优化功能集成到了编译器中(并且最近十年来一直在这样做)。 您是否真的希望比世界上一些最聪明的人有经验,能力和时间来编写更好,更优化的C代码?

Pleeeeease…

如果您像我一样,其余99.99%的人,则明智的做法是忘记C。克服它。 (向所有核心C程序员致敬,不要被激怒)。

尽管我们的开发人员喜欢抽象,但我们不能否认它们天生就是泄漏的事实。 硬件*确实*很重要。 处理器数量和内存增长的趋势使共享内存线程并发变得更加困难。 锁定 ,上下文切换和线程调度可以使您的吞吐量等于糖浆,认为将更多线程倒入闪亮的新超级美容机中将以某种方式神奇地为您提供更多性能。 在某种程度上可能会,但这不是我的意思。

那么该怎么办? 我并没有声称自己是一名性能专家,但我不是,但我有一些实用建议,至少可以帮助我解决过去一些讨厌的性能错误。

1.编写简洁明了的代码。 考虑使您的类不可变,它们是线程安全的,因此不需要同步,并且可以放心地对其进行缓存,以确保对象值在创建后不会更改。 不变性还导致代码更易于理解。 不要尝试使用过早的优化技巧来超越JVM。

Donald Knuth说: “程序员浪费大量时间来考虑或担心程序非关键部分的速度,而这些效率的尝试实际上在考虑调试和维护时会产生严重的负面影响。 我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源。 但是我们不应该放弃我们那关键的3%的机会。”

2.花一些时间了解不同垃圾收集器的工作方式。 信息有点分散,但是它在那里。 找到垃圾回收和您的应用程序之间的资源共享最有效点。 一般来说,较大的堆意味着垃圾收集器需要更努力地工作(窃取更多的CPU周期),并且暂停时间会更长,但频率更低。 以我的经验,即使使用CMS也无法避免世界停顿,因为最终您的堆将像瑞士奶酪一样碎片化,并且繁荣, 内存碎片化失败 。 好消息是,JDK7可能会包括一个名为G1的新的低暂停时间收集器,该收集器有可能完全避免世界停顿。 另请参阅Java 7中的垃圾优先收集器(G1) 。

3.在编程时,默认情况下始终使用java.util.concurrency 。 阅读Java内存模型和线程规范 。 它将帮助您理解为什么您的代码可能无法正常运行。 关于并发的主题也有很多不错的书:

  • 实践中的Java并发
  • 多处理器编程的艺术
  • Java并发编程:设计原理和模式(第二版)

4.您可能正在处理具有粗糙粒度同步的旧代码(您无法影响),从而导致高线程争用。 将CPU亲和力与同一台机器上的多个JVM进程一起使用可以帮助减少对热锁的争用。

5.如果您认为通过执行基准测试发现JVM性能问题,请首先确保您“知道”测量结果是准确的 。 如果您尝试测量某些东西, 请不要测量其他东西 。 忽略此建议可能会使您误以为是真正的问题所在。 因此,在开始测量之前,请确保正确隔离系统部件。

例如,如果您怀疑线程争用,请查看ThreadInfo或尝试jstat并查找sun.rt._sync_ContendedLockAttempts。

jstat -J-Djstat.showUnsupported=true -snap PID | grep _sync_

关于这个主题有太多话要说,但是我现在没有时间写更多。 编码愉快!

参考: Deep Hacks博客上的JCG合作伙伴 KristofferSjögren的 Usain Bolt看起来 不错 。

相关文章 :

  • Java最佳实践
  • 如何在Java中获得类似于C的性能
  • 每个程序员应该了解的内存系统知识
  • Java内存模型–快速概述和注意事项

翻译自: https://www.javacodegeeks.com/2011/09/quick-tips-for-improving-java-apps.html

改善Java应用程序性能的快速技巧相关推荐

  1. java 注解应用技巧_改善Java应用程序性能的快速技巧

    java 注解应用技巧 曾经遇到过性能问题吗? 我也是. 如果我的经理再喊一次" faaaaster",我一生都会有听力障碍. 顺便说一句,我能听到所有噪音中的德语发音吗? ;-) ...

  2. 一文了解 Java 应用程序性能优化指南

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 在<2018 最具就业前景的 7 大编程语言>一文中,通过分析了来自 Indee ...

  3. 改善WPF应用程序性能的10大方法(转)

    细数改善WPF应用程序性能的10大方法 2010年11月16日00:05 it168网站原创  作者:IT168 黄永兵  编辑:胡铭娅 评论:0条 本文Tag: ASP.NET WPF .NET   ...

  4. 在 NetBeans IDE 6.0 中分析 Java 应用程序性能

    NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU ...

  5. 细数改善WPF应用程序性能的10大方法

    WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系 ...

  6. hibernate性能_改善Hibernate应用程序性能的7种方法

    hibernate性能 Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩 ...

  7. 改善Hibernate应用程序性能的7种方法

    Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩展时,我们该怎么办? 在 ...

  8. java多线程程序性能调优 优化过程

    我, 一多年c++开发,由于项目原因需要对一个性能底下的多线程java程序进行调优,百度google了几把,妈蛋,没有发现指导如何java线程调优的文章啊,都是一些java使用规范,我去,那我大jav ...

  9. 如何快速提升 Go 程序性能?

    快速提升 Go 程序性能的实用技巧,你值得了解一下. 作者 | Stephen Whitworth 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 我对软件性能的话题十分 ...

最新文章

  1. 大型互联网应用中的日志系统
  2. Calendar的获取变化日期
  3. CTF-杂项与密码学之工具使用汇总(三)
  4. HLSL的一些常见渲染特效的实现
  5. windows驱动开发详解学习笔记
  6. Triangle HDU - 5914
  7. [js] 在DOM上同时绑定两个点击事件(一个用捕获,一个用冒泡),事件总共会执行几次,先执行哪个事件?
  8. 从零开始学Pytorch(六)之梯度消失、梯度爆炸
  9. “微软高管”拯救必应 搞定盖茨成为合伙人?官方打脸:实为开除员工
  10. 河南农业大学计算机试题,河南农业大学计算机vb考试必出
  11. 经典机器学习系列(七)【聚类分析】
  12. java多线程编程--模拟龟兔赛跑过程
  13. oracle汉字转拼音
  14. linux 蓝牙驱动 chi,linux下的蓝牙驱动程序详解
  15. iOS:如何实现在文字上添加拼音
  16. 幼儿园进行计算机培训心得体会,幼儿园家园共育的开展感受和体会
  17. 洛谷刷题记录(python)【入门3】循环结构
  18. 打印机用计算机名慢,“电脑连上打印机就超级慢”的解决方案
  19. nth-child的使用方法
  20. 以点对点的方式连接8台计算机共需要多少条传输线?如果是9台呢?10台呢?使用什么公式来计算这个结果?...

热门文章

  1. 实现滚到div时淡入效果
  2. jdk10与jdk9的区别_JDK 8与JDK 10:三元/拆箱的区别
  3. java streams_使用Stream.peek在Java Streams内部进行窥视
  4. 怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行
  5. Apache NetBeans?
  6. 上下文异常中的上下文属性_在没有适当上下文的情况下引发异常是一种不良习惯...
  7. aws sqs_在Spring中将AWS SQS用作JMS提供程序
  8. javafx 剪切板_JavaFX技巧18:路径剪切
  9. Spring Boot微服务,Docker和Kubernetes研讨会–第3部分
  10. javase11源码文件_JavaSE 7,8:确定特定文件系统支持的视图