Java编程中的性能优化如何实现?

八戒创业伙伴

30天以前 0浏览
Java编程中的性能优化如何实现?

性能优化应该分两步走,第一步:寻找性能瓶颈,第二步:性能调优;

下面分别进行分析:

第一步:寻找性能瓶颈

通常性能瓶颈的表象是资源消耗过多、外部处理系统的性能不足;或者资源消耗不多,但是程序效应还是很慢;

资源主要消耗在cpu,文件io,网络io以及内存方面,当某一资源消耗过多会造成系统响应慢;

外部处理系统的性能不足主要是所调用其他系统提供的功能或数据库的响应速度不够,外部系统慢可能也是资源消耗过多导致,数据库响应慢可以对数据库进行调优;

资源消耗不多但仍然慢主要原因是程序代码运行效率不高,未充分使用资源或程序结构不合理;

1.1cpu消耗分析

可以通过相关命令比如top,pidstat,找出各个类型消耗cpu的占比,最常见的就是us和sy类型分别代表用户进程消耗和线程间切换消耗;如果us过高可以找到相关的线程ID然后分析代码;如果sy过高是不是启动了过多的线程导致线程切换过多;

1.2文件io消耗

要跟踪线程的文件IO消耗,可以通过pidstat来查找,可以查到每秒的读写kb数;找到读写kb数多个线程,然后结合jstack找到相关的java代码,然后分析;

1.3网络io消耗

可以通过sar来分析网络的消耗状况,但是不能具体到每个线程所消耗的网络IO,只能对线程dump,查找产生了大量网络io的线程;

1.4内存消耗

结合top或pidstat,以及jvm的内存分析工具来分析内存消耗;要区分是jvm外的物理内存还是jvmheap区内存;如果是jvm外的物理内存要分析程序中DirectByteBuffer,如果是jvmheap可以通过jvisualvm来分析;

1.5资源消耗不多但仍然慢

主要原因是:锁竞争激烈,未充分使用硬件资源,数据量增长

第二步:性能调优

2.1jvm调优

主要包括各个代的大小、GC策略等;代大小的设置:避免新生代大小设置过小,或者过大;避免Survivor区过小或过大;合理设置新生代存活周期;GC策略根据吞吐量优先还是延迟优先进行设置策略;

2.2程序调优

1.CPU消耗严重解决

us过高主要是执行线程无任何挂起动作,可以进行Thread.sleep操作;sy过高主要是因为创建了过多的线程导致线程上下文切换;

2.文件IO消耗严重解决

造成文件IO消耗严重的原因主要是多个线程写大量的数据到同一个文件,导致文件很快变的很大,从而写入速度越来越慢,并造成各线程激烈竞争争抢文件锁,常用的调优方法:异步写文件,批量读写,限流,限制文件大小;

3.网络IO消耗严重解决

主要原因是同时发送或者接受的包太多,解决办法就是限流;

4.内存消耗严重解决

解决:释放不必要的引用,使用对象缓存池,采用合理的缓存失效策略,合理使用softReference和WeakReference;

2.3资源消耗不多但仍然慢

主要原因是:锁竞争激烈,未充分使用硬件资源

本文仅代表作者观点,版权归属原创作者,如需转载请在文中标注来源及作则名字。

免责声明:本文系转载编辑文章,仅做分享只用,如有疑问请联系邮箱:110@zbj.com

java开发
大家都在看
Java程序猿与网络安全哪个行业前景更好?

Java程序猿与网络安全哪个行业前景更好?

java开发
3浏览
web编程用JavaScript怎么样?

web编程用JavaScript怎么样?

java开发
3浏览
java软件开发可以用哪些软件?

java软件开发可以用哪些软件?

java开发
6浏览
java如何实现对象的深克隆?

java如何实现对象的深克隆?

java开发
2浏览
现在JAVA和前端哪个需求量大一点?

现在JAVA和前端哪个需求量大一点?

java开发
2浏览
WEB前端和JAVA哪个需求量大?

WEB前端和JAVA哪个需求量大?

java开发
2浏览
java开发app案例教程,java开发手机app教程

案例app开发app开发手机app教程手机开发手机appjavajava开发
69浏览
作为java初级程序员,该去国企还是私企?

作为java初级程序员,该去国企还是私企?

java开发
0浏览
Java开发程序员该如何应对公司的笔试题?

Java开发程序员该如何应对公司的笔试题?

java开发
0浏览
Java编程中的性能优化如何实现?

Java编程中的性能优化如何实现?

java开发
0浏览
哪些网站可以在线构建java框架?

哪些网站可以在线构建java框架?

java开发
2浏览
net和java两个方向哪个比较好?

net和java两个方向哪个比较好?

java开发
3浏览
java软件开发到底是干什么的?

java软件开发到底是干什么的?

java开发
2浏览
java开发一个网站平台技术方面需要考虑哪些?

java开发一个网站平台技术方面需要考虑哪些?

java开发
2浏览
web前端和java,哪个比较好一些呢?

web前端和java,哪个比较好一些呢?

java开发
2浏览
如何深刻理解JavaWeb中session和cookie?

如何深刻理解JavaWeb中session和cookie?

java开发
4浏览
选择web前端还是java后端呢?

选择web前端还是java后端呢?

java开发
2浏览
Go语言出后,Java还是最佳选择吗?

Go语言出后,Java还是最佳选择吗?

java开发
2浏览
java做web比python做web好在哪?

java做web比python做web好在哪?

java开发
2浏览
php和java相比,应该往哪个方向发展?

php和java相比,应该往哪个方向发展?

java开发
2浏览
点赞
收藏
分享