免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux

Java程序性能优化 ,您从何入手?(获奖名单已公布-2012-11-22) [复制链接]

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
发表于 2012-10-22 19:58 |显示全部楼层
回复 10# billykinggym

呵呵,希望有机会能够拜读你的大作~
   

论坛徽章:
0
发表于 2012-10-23 02:19 |显示全部楼层
先支持一下

论坛徽章:
6
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:582015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-10-23 09:19 |显示全部楼层
本帖最后由 realmon 于 2012-10-23 09:22 编辑

关于字符串分割:
jdk推荐用split()并不推荐用StringTokenizer
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
.
不知道以后会不会移除StringTokenizer

论坛徽章:
0
发表于 2012-10-23 09:54 |显示全部楼层
realmon 发表于 2012-10-23 09:19
关于字符串分割:
jdk推荐用split()并不推荐用StringTokenizer
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
.
不知道以后会不会移除StringTokenizer
.


在正式移除前,肯定会先标明@Deprecated的。到时候,在不用好了。不太可能直接移掉他的。而且很多@Deprecated的东东,好几年了,还在 呵呵。

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
发表于 2012-10-23 18:13 |显示全部楼层
本帖最后由 hbsycw 于 2012-10-23 18:23 编辑

继续回答第二个问题~

2. 如果程序性能不如人意,如何找到代码中的性能瓶颈

这个问题比较大,我尝试来回答下: 程序性能不如意,首先,应该从系统架构来看,业务逻辑是否合理,处理过程是否可以简化或者优化?硬件资源的配置是否到位?系统的软件架构是否需要进行调整?其次,应该从网络计算资源的使用,比如一些关键指标数据,系统吞吐量、CPU的使用率、内存使用率、网络延迟、磁盘IO等,结合日志来诊断问题代码的所在;最后,合理的JVM参数设置、调优等,这些都需要在真实的业务场景下,在压力测试中暴露问题,解决问题。对于WEB的应用来说,一般后面的数据库应该是一个系统瓶颈(并发和磁盘IO),这个在系统架构,数据建模,针对具体数据库的调优都有很大的空间来做,代码层面主要体现,并发设计,使用连接池,使用缓存,减少对磁盘数据的频繁读写等提高性能。

论坛徽章:
0
发表于 2012-10-23 20:52 |显示全部楼层
hbsycw 发表于 2012-10-23 18:13

本帖最后由 hbsycw 于 2012-10-23 18:23 编辑


继续回答第二个问题~

2. 如果程序性能不如人意,如何找到代码中的性能瓶颈

这个问题比较大,我尝试来回答下: 程序性能不如意,首先,应该从系统架构来看,业务逻辑是否合理,处理过程是否可以简化或者优化?硬件资源的配置是否到位?系统的软件架构是否需要进行调整?其次,应该从网络计算资源的使用,比如一些关键指标数据,系统吞吐量、CPU的使用率、内存使用率、网络延迟、磁盘IO等,结合日志来诊断问题代码的所在;最后,合理的JVM参数设置、调优等,这些都需要在真实的业务场景下,在压力测试中暴露问题,解决问题。对于WEB的应用来说,一般后面的数据库应该是一个系统瓶颈(并发和磁盘IO),这个在系统架构,数据建模,针对具体数据库的调优都有很大的空间来做,代码层面主要体现,并发设计,使用连接池,使用缓存,减少对磁盘数据的频繁读写等提高性能。

哇!这个回答太专业了。几乎涵盖了所有的情况。我在简单补充一下。对于程序级别的问题,通过可以通过线程dump和堆dump来看。如何获得线程dump和堆dump以及如何分析,在书中有详细的介绍。
其次,还可以通过如JProfile ,visualVM等工具,监控系统的行为,找到代码中的瓶颈。

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
发表于 2012-10-24 17:17 |显示全部楼层
对于web app性能优化
比较立竿见影的是从jvm参数入手
但是根本上还是要从程序上找原因
java的内存泄露,句柄关闭遗漏这些也是需要重点关注的。
现在不少app服务器都带有分析工具。不过良好的编码规范和算法总是胜过事后分析。

论坛徽章:
0
发表于 2012-10-24 19:33 |显示全部楼层
回复 17# laputa73


    是的,最根本的还是系统的整体结构和代码实现。如果系统整体实现有问题,JVM再怎么调整,也帮不上什么大忙。

论坛徽章:
0
发表于 2012-10-25 08:28 |显示全部楼层
谈到优化,最基础的一个问题就是,需要用java的地方再用java,不需要用的地方千万不要用,比如,.jsp里面有大量的html页面内容,但tomcat之类的server处理html肯定比nginx,lighttpd,apache等要弱,那就把这些内容分离出来,交给它们处理,tomcat只处理jsp脚本。最多就是server安装配置的时候稍复杂一点。
另外,好的第三方工具能用就用,比如memcache,比自己维护个链表强多了。还有,有些内容重复的,要多使用缓冲。还有很多处理量大,但逻辑简单的功能,完全可以用c来实现,比如WebIM的proxy,用list_entry方法在百万用户的链表中找指定元素,只是一次操作,其他的不管用map还是list,最快也要n级。所以,最强烈的建议就是不要把什么东西都放在java里面包上一个大包,还美其名曰三层架构。想想大夏天的脚外面包着厚袜子,再穿个不透气的鞋子。。。。 到了夏天就要穿凉鞋,乌克兰棉皮鞋再漂亮也穿不得。

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
发表于 2012-10-25 10:24 |显示全部楼层
本帖最后由 action08 于 2012-10-25 10:26 编辑

@hbsycw

2. 如果程序性能不如人意,如何找到代码中的性能瓶颈

这个问题比较大,我尝试来回答下: 程序性能不如意,首先,应该从系统架构来看,业务逻辑是否合理,处理过程是否可以简化或者优化?硬件资源的配置是否到位?系统的软件架构是否需要进行调整?其次,应该从网络计算资源的使用,比如一些关键指标数据,系统吞吐量、CPU的使用率、内存使用率、网络延迟、磁盘IO等,结合日志来诊断问题代码的所在;最后,合理的JVM参数设置、调优等,这些都需要在真实的业务场景下,在压力测试中暴露问题,解决问题。对于WEB的应用来说,一般后面的数据库应该是一个系统瓶颈(并发和磁盘IO),这个在系统架构,数据建模,针对具体数据库的调优都有很大的空间来做,代码层面主要体现,并发设计,使用连接池,使用缓存,减少对磁盘数据的频繁读写等提高性能。



--
赞同你的观点,

至于第一点,还是老腔调,性能与功能不可兼得,各取所需。不是针对java,其他语言入c++,php也是类似的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP