JAVA的性能优化简述

谈谈java的性能优化技术:
java以垃圾回收著称,意思是new出来的对象,JVM负责回收,使得开发者无需管理内存问题(实际上也没法管理)。一个程序可以长期稳定健康的运行首要条件就是内存的使用始终在一个平稳的态势上,很难想象进程在运行中其内存的使用如过山车一般忽高忽低,如此不崩溃都对不起开发者。
JVM的垃圾回收其实就是过山车的导演,在内存不够用的时候来一次full gc,此时整个进程的内存使用从低于海平面两千米一下子冲高到高于海平面五千米,在这个过程中,进程的所有线程(垃圾回收线程除外)都挂起等待一次过山车表演直至结束(绳子没断继续循环,绳子断了则out of memory->game over)。试想一下:如果JAVA进程频繁的表演过山车则系统的稳定性和运行效率将会low到什么程度!
所以,降低JVM的垃圾回收频率,或者干脆不给它垃圾回收的机会,那程序的稳定性和运行效率就会好很多很多了。
具体措施:
1.减少生成中间对象,大量小尺寸对象要用对象池。
2.字符串的拆解不要用split或substring,要用indexof和StrBuilder配合使用(原则上也是减少中间对象的生成)
3.io操作中文本数据如果不含unicode则尽量用byte数组,否则最好自己实现一个utf-8的encode和decode,再配合一个线程相关的初始化好的byte数组。
4.使用DirectBuffer应该使用文件映射(Private 方式,无硬盘io)方式,因为此方式占用的是进程的地址空间资源,跟JVM管理的内存没任何关系。
5.NIO方式下的套接字接收/发送缓存应该使用4中的DirectBuffer。
我设计开发的JAVA版的网络服务框架中实现了一个DirectBuffer池供给套接字的接收/发送缓存使用,在做压力测试时套接字连接达到3000,每个连接每秒发送兆级数据,池中有6000个DirectBuffer对象(每个4兆),然而JVM的内存使用始终是波澜不惊,几个小时过后也没发生一次垃圾回收。
总结:性能和稳定性是软件的基础,理想再美好,如果没有坚实的基础也是空中楼阁。

发布了19 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qman007/article/details/103956378