Java 性能优化的五大技巧

java的性能优化可是一个大课题, 要对你的 java 代码进行优化,需要理解 java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的。下面小编给大家介绍Java 性能优化的五大技巧,欢迎阅读!

性能优化取决于多个因素,包括垃圾收集、虚拟机和底层操作系统(OS)设置。有多个工具可供开发人员进行分析和优化时使用,你可以通过阅读 Java Tools for Source Code Optimization and Analysis 来学习和使用它们。如果你正苦苦挣扎于术语和 Java 的原理,可以先去查看 Livecoding Java category page,上面有直播,存档的视频,以及一些其他有用的信息。

“视情况而定”

必须要明白的是,没有两个应用程序可以使用相同的优化方式,也没有完美的优化 java 应用程序的参考路径。使用最佳实践并且坚持采用适当的方式处理性能优化。想要达到真正最高的性能优化,你作为一个 Java 开发人员,需要对 Java 虚拟机(JVM)和底层操作系统有正确的理解:

JVM 和底层操作系统:Java 虚拟机是任何 Java 程序的家。阅读 JVM internals guide 了解更多有关于 JVM 内部和操作系统差异的内容。

JVM 分布模型:Java 分布模型为您的应用程序处理多个JVM实例。分布模型提高了应用程序的性能,因为它获得更多的资源来工作。你可以用两种方法继续优化。第一种方法是在一个堆大小为2GB或8GB的单服务器运行多个 JVM。第二种方法是在多个服务器上运行单个 JVM。正确方法的选择取决于多个因素,包括可用性和响应性。

JVM 体系结构:选择正确的 JVM 体系结构对于性能来说是很重要的。你可以选择 64 位或者 32 位的 JVM 机器。 一般来说,32 位 JVM 的性能比它对应的 64 位 JVM 要好。 只有当你需要的堆大小大于 3 GB 时,才选择 64 位的 JVM。

清楚了性能优化和其要素,现在我们可以专注于那些可以优化你的Java应用的技巧.

1. 调整垃圾收集(GC)

由于垃圾收集的复杂性,很难发现你的应用的准确性能.不过,如果你真的想优化你的应用,你应该相应地处理垃圾收集.通用的准则是调整GC设置并同时执行性能分析.

一旦你对结果感到满意,你可以停止该过程并寻求其他优化方式.确保除了在平均事务处理时间之外,你还留心了异常值.这些异常值是造成Java应用缓慢的真正的罪魁祸首并且很难找到.

此外,你要明白应用运行期间性能下降的效应.在每单个cpu时钟内的缓慢操作是可以忽略的,但在每单个数据库事务中的缓慢操作则是非常昂贵的消耗.但是你应该根据性能短板选择你的优化策略,并应该根据工作负载来优化应用.

2. 正确地选择适合你的GC算法

让我们更深入地探讨GC优化.毕竟,GC优化是要处理的整个优化问题中最基本的.目前,Java中有四种供你选择的垃圾收集算法.每种算法满足不同的需求,因此你要选择(适合你的需求的).很多开发人员正是因为不了解GC算法而未能优化他们的应用.

这四个算法分别是串行回收器,并行/吞吐量回收器,CMS回收器和G1回收器.想要了解更多关于每种垃圾收集器的信息及它们是如何工作的,请查看这篇来自Takipi博客的非常棒的文章Garbage Collectors—Serial vs. Parallel vs. CMS vs. G1. 这篇文章同时还讨论了Java8对GC算法的影响及其他细节上的改变.

让我们再回到GC算法上,根据Understanding Java Garbage Collection这篇文章所述,并发标记和清除GC(即"CMS")算法才是适合网络服务端应用的最佳算法.并行GC算法适合那些内部可预测的应用.

G1和CMS是并发操作的理想选择,但仍然会引起(应用)频繁停顿.实际的选择取决于你如何取舍.举例来说,尽管选择并行算法会带来更长的GC停顿时间,但相较于其他GC算法,选择并行算法仍是一个好主意.

3.Java 堆

Java内存堆在迎合内存需求方面担任了至关重要角色.通常更好的做法是初始时分配最小的堆,然后通过持续的测试不断增加它的大小.大多数时候优化问题都可以通过增加堆的大小解决,但如果存在大量的GC开销,则该解决方案不起作用.

GC开销还会使吞吐量急剧下降,进而使得应用难以形容的'慢.此外,及早调整GC可以帮助你避免堆大小分配的问题.开始的时候,你可以选择任何1GB到8GB的堆大小.当你选择正确的堆大小,老生代和新生代对象的概念也就不需要了.

总而言之,堆大小应该取决于老生代和新生代对象的比率,之前的GC优化和对象集合(即所有对象占用的内存大小).

4. 关键应用优化

关键代码优化是优化你的Java应用最好的方式.如果你的应用对GC和堆优化没有反应,那么最好是做架构改进并关注于你的应用是如何处理信息的.使用聪明的算法并管理好对象就能解决大量的问题,包括内存碎片,堆大小问题和垃圾收集的问题.

5.使用最优的函数

Java提供了多个函数来提升算法效率.如果你使用StringBuilder代替简单的String,你可以得到微乎其微的性能提升.不过,我们还有其他方式在代码层面进行优化.让我们看看下面这些优化方法.

使用StringBuilder代替+操作符.

避免使用iterator().

多使用栈带来的好处.

避免使用正则表达式,使用Apache Commons Lang作为代替.

远离递归.递归会占用大量资源!

【Java 性能优化的五大技巧】相关文章:

java优化技巧_Java 性能优化的五大技巧相关推荐

  1. java性能瓶颈分析_Java性能优化技巧整理,做一个深度的程序员

    原标题:Java性能优化技巧整理,做一个深度的程序员 在我们身边是一大批的程序员,层次不一,但是放眼观,我们很容易就可以看到那些是业务型程序员,那些是有层次的程序员.注重细节,注重性能,做一个有深度的 ...

  2. java split()方法_Java 性能优化的 50 个细节(珍藏版)

    作 者:Java杂记 来 源:yq.aliyun.com/articles/662001 在Java程序中,性能问题的大部分原因并不在于Java语言,而是程序本身.养成良好的编码习惯非常重要,能够显著 ...

  3. java性能优化方案_Java性能优化要点

    Java性能优化要点 本文介绍如何通过以下几点从Java中挤压出性能,该大部分经验来自于Netty作者. JITJava即时编译器 当Java执行runtime环境时,每遇到一个新的类,JIT编译器在 ...

  4. java list最大容量_Java 性能优化:35 个小细节,提升你的 Java 代码运行效率

    优质文章,及时送达 作者 | 萌小Q 来源 | cnblogs.com/Qian123/p/6046096.html 上篇 | 为什么我不建议你去外包公司? 前言 代码优化 ,一个很重要的课题.可能有 ...

  5. 优化Android App性能?十大技巧

    优化Android App性能?十大技巧 android shangxuetang 1年前 (2014-05-27) 3399℃ 4评论 android 无论锤子还是茄子手机的不断冒出,Android ...

  6. MySQL第12天:MySQL索引优化分析之性能优化案例实践

    MySQL索引优化分析之性能优化案例实践 执行计划中各select_type含义可以看:MySQL第11天:MySQL索引优化分析之性能分析 https://weibo01.blog.csdn.net ...

  7. 服务器性能优化之网络性能优化

    hi ,大家好,今天分享一篇后台服务器性能优化之网络性能优化,希望大家对Linux网络有更深的理解. 曾几何时,一切都是那么简单.网卡很慢,只有一个队列.当数据包到达时,网卡通过DMA复制数据包并发送 ...

  8. 服务器性能优化和Mysql性能优化

    服务器性能优化和Mysql性能优化 影响性能的几个因素 服务器硬件 CPU 内存 IO子系统 服务器系统 CentOS系统参数优化 sysctlconf 优化 limitconf参数优化 磁盘调度策略 ...

  9. java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]

    Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...

  10. java如何定义一个字符栈_Java性能优化之字符串优化处理

    本文来源于: https://blog.csdn.net/xlgen157387/article/details/51870322 1.String对象 String对象是java中重要的数据类型,在 ...

最新文章

  1. Blender+Substance Painter全流程制作真实的机器人学习教程
  2. @所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬
  3. C++语言程序设计视频教程_清华大学_郑莉(基础篇+进阶篇)
  4. 电脑只有一个c盘怎么办_电脑的C盘快满了怎么办
  5. pwntools解题脚本模板
  6. L1-005 考试座位号 (15分) C语言实现(18行代码AC!)
  7. 当当网新用户注册界面——界面源码
  8. jqgrid 列表条件查询的几步关键操作
  9. 斗地主AI算法——第八章の被动出牌(2)
  10. halcon裁剪图像_Halcon学习之七:改变图像的现实方式和大小
  11. 在Azure平台上使用托管卡进行身份认证
  12. DataSet之间的赋值
  13. c++opencv汉字分割_基于OpenCV 的车牌识别
  14. Bsie(鄙视IE)
  15. Java经典算法题(一,kafka权威指南百度网盘
  16. mac 修改hosts不生效问题
  17. 个人如何搭建属于自己的博客网站?
  18. 解决visio对象在word中显示不全的问题
  19. R语言(6)-数据结构之矩阵(matrices)与数组(array)
  20. leet290单词规律

热门文章

  1. Unity直接调用Python脚本
  2. Java面向对象思想
  3. 190519每日一句
  4. unity相机渲染不同层的东西和相机的深度
  5. Atitit 提升开发效率 mvc 框架 java 目录 第一节 Spark mvc Supt htdpl 1 第二节 jfinal 框架 Supt htdpl 不推荐 1 第三节 个人刚接
  6. Atitit 数据与模板绑定法 目录 1.1. templet - 自定义列模板 1 1.2. 方式三:直接赋值模版字符。事实上,templet 也可以直接是一段 html 内容,如: 1 1.2.
  7. Atitit attilax总结的对于attilax重要的jsr规范,以及需要增加的jsr规范
  8. Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
  9. Atitit.注解解析(1)---------词法分析 attilax总结 java .net
  10. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结