java优化技巧_Java 性能优化的五大技巧
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 性能优化的五大技巧相关推荐
- java性能瓶颈分析_Java性能优化技巧整理,做一个深度的程序员
原标题:Java性能优化技巧整理,做一个深度的程序员 在我们身边是一大批的程序员,层次不一,但是放眼观,我们很容易就可以看到那些是业务型程序员,那些是有层次的程序员.注重细节,注重性能,做一个有深度的 ...
- java split()方法_Java 性能优化的 50 个细节(珍藏版)
作 者:Java杂记 来 源:yq.aliyun.com/articles/662001 在Java程序中,性能问题的大部分原因并不在于Java语言,而是程序本身.养成良好的编码习惯非常重要,能够显著 ...
- java性能优化方案_Java性能优化要点
Java性能优化要点 本文介绍如何通过以下几点从Java中挤压出性能,该大部分经验来自于Netty作者. JITJava即时编译器 当Java执行runtime环境时,每遇到一个新的类,JIT编译器在 ...
- java list最大容量_Java 性能优化:35 个小细节,提升你的 Java 代码运行效率
优质文章,及时送达 作者 | 萌小Q 来源 | cnblogs.com/Qian123/p/6046096.html 上篇 | 为什么我不建议你去外包公司? 前言 代码优化 ,一个很重要的课题.可能有 ...
- 优化Android App性能?十大技巧
优化Android App性能?十大技巧 android shangxuetang 1年前 (2014-05-27) 3399℃ 4评论 android 无论锤子还是茄子手机的不断冒出,Android ...
- MySQL第12天:MySQL索引优化分析之性能优化案例实践
MySQL索引优化分析之性能优化案例实践 执行计划中各select_type含义可以看:MySQL第11天:MySQL索引优化分析之性能分析 https://weibo01.blog.csdn.net ...
- 服务器性能优化之网络性能优化
hi ,大家好,今天分享一篇后台服务器性能优化之网络性能优化,希望大家对Linux网络有更深的理解. 曾几何时,一切都是那么简单.网卡很慢,只有一个队列.当数据包到达时,网卡通过DMA复制数据包并发送 ...
- 服务器性能优化和Mysql性能优化
服务器性能优化和Mysql性能优化 影响性能的几个因素 服务器硬件 CPU 内存 IO子系统 服务器系统 CentOS系统参数优化 sysctlconf 优化 limitconf参数优化 磁盘调度策略 ...
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...
- java如何定义一个字符栈_Java性能优化之字符串优化处理
本文来源于: https://blog.csdn.net/xlgen157387/article/details/51870322 1.String对象 String对象是java中重要的数据类型,在 ...
最新文章
- Blender+Substance Painter全流程制作真实的机器人学习教程
- @所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬
- C++语言程序设计视频教程_清华大学_郑莉(基础篇+进阶篇)
- 电脑只有一个c盘怎么办_电脑的C盘快满了怎么办
- pwntools解题脚本模板
- L1-005 考试座位号 (15分) C语言实现(18行代码AC!)
- 当当网新用户注册界面——界面源码
- jqgrid 列表条件查询的几步关键操作
- 斗地主AI算法——第八章の被动出牌(2)
- halcon裁剪图像_Halcon学习之七:改变图像的现实方式和大小
- 在Azure平台上使用托管卡进行身份认证
- DataSet之间的赋值
- c++opencv汉字分割_基于OpenCV 的车牌识别
- Bsie(鄙视IE)
- Java经典算法题(一,kafka权威指南百度网盘
- mac 修改hosts不生效问题
- 个人如何搭建属于自己的博客网站?
- 解决visio对象在word中显示不全的问题
- R语言(6)-数据结构之矩阵(matrices)与数组(array)
- leet290单词规律
热门文章
- Unity直接调用Python脚本
- Java面向对象思想
- 190519每日一句
- unity相机渲染不同层的东西和相机的深度
- Atitit 提升开发效率 mvc 框架 java 目录 第一节 Spark mvc Supt htdpl	1 第二节 jfinal 框架 Supt htdpl 不推荐	1 第三节 个人刚接
- Atitit 数据与模板绑定法 目录 1.1. templet - 自定义列模板	1 1.2. 方式三:直接赋值模版字符。事实上,templet 也可以直接是一段 html 内容,如:	1 1.2.
- Atitit attilax总结的对于attilax重要的jsr规范,以及需要增加的jsr规范
- Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
- Atitit.注解解析(1)---------词法分析 attilax总结 java .net
- Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结