欢迎来到天天文库
浏览记录
ID:31317183
大小:71.50 KB
页数:4页
时间:2019-01-08
《jvm调优总结(8):反思-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JVM调优总结(8):反思-编程开发技术JVM调优总结(8):反思原文出处:pengjiaheng垃圾回收的悖论所谓“成也萧何败萧何”。Java的垃圾回收确实带来了很多好处,为开发带来了便利。但是在一些高性能、高并发的情况下,垃圾冋收确成为了制约Java应用的瓶颈。目前JDK的垃圾回收算法,始终无法解决垃圾回收时的暂停问题,凶为这个暂停严重影响了程序的相应时间,造成拥塞或堆积。这也是后续JDK增加G1算法的一•个重要原因。当然,上而是从技术角度出发解决垃圾回收带来的问题,但是从系统设计方而我们就需要问一
2、下了:????我们需要分配如此大的内存空间给应用吗????我们是否能够通过有效使用内存而不是通过扩大内存的方式来设计我们的系统呢????我们的内存中都放了什么内存中需要放什么呢?个人认为,内存中需要放的是你的应用需要在不久的将来再次用到到的东西。想想看,如杲你在将來不用这些东西,何必放内存呢?放文件、数据库不是更好?这些东西一般包括:1.系统运行时业务相关的数据。比如web应用中的session、即时消息的session等。这些数据-•般在一个用户访问周期或者一个使用过程中都需要存在。2.缓存。缓存就比
3、较多了,你所要快速访问的都可以放这里面。其实上而的业务数据也可以理解为一种缓存。3.?线程。因此我们是不是可以这么认为,如果我们不把业务数据和缓存放在JVM中,或者把他们独立出來,那么Java应用使用时所需的内存将会大大减少,同时垃圾回收时间也会相应减少。我认为这是可能的。解决之道数据库、文件系统把所有数据都放入数据库或者文件系统,这是一种最为简单的方式。在这种方式下,Java应用的内存基本上等于处理一次峰值并发请求所需的内存。数据的获取都在每次请求时从数据库和文件系统中获取。也可以理解为,一次业务访问
4、以后,所冇对彖都可以进行回收了。这是一种内存使用最有效的方式,但是从应用角度来说,这种方式很低效。内存-硬盘映射上面的问题是因为我们使用了文件系统带來了低效。但是如果我们不是读写硬盘,而是写内存的话效率将会提高很多。数据库和文件系统都是实实在在进行了持久化,但是当我们并不需要这样持久化的时候,我们可以做一些变通一一把内存当硕盘使。内存-硬盘映射很好很强大,既用了缓存又对Java应用的内存使用又没有影响。Java应用还是Java应用,他只知道读坊的还是文件,但是实际上是内存。这种方式兼得的Java应用与缓
5、存两方面的好处。memcached的广泛使用也止是这一类的代表。同一机器部署多个JVM这也是一种很好的方式,可以分为纵拆和横拆。纵拆可以理解为把Java应用划分为不同模块,各个模块使用一个独立的Java进程。而横拆则是同样功能的应用部署多个JVM。通过部署多个JVM,可以把每个JVM的内存控制一个垃圾回收可以忍受的范围内即可。但是这相当于进行了分布式的处理,其额外带来的复杂性也是需要评估的。另外,也有支持分布式的这种JVM可以考虑,不要要钱哦:)程序控制的对象生命周期这种方式是理想当小的方式,口前的虚拟
6、机述没有,纯属假设。即:考虑由编程方式配置哪些对象在垃圾收集过程屮可以直接跳过,减少垃圾回收线程遍历标记的时间。这种方式相当于在编程的吋候告诉虚拟机某些对象你可以在和寸间后在进行收集或者由代码标识可以收集了(类似C、C++),在这之前你即便去遍历他也是没有效果的,他肯定是还在被引用的。这种方式如果JVM可以实现,个人认为将是一个飞跃,Java即冇了垃圾回收的优势,乂有了C、C++对内存的可控性。线程分配Java的阻塞式的线程模型基木上可以抛弃了,口前成熟的NIO框架也比较多了。阻塞式TO带來的问题是线程
7、数量的线性増长,而NTO则可以转换成为常数线程。因此,对于服务端的应用而言,NI0还是唯一选择。不过,JDK7中为我们带來的A10是否能让人眼前一亮呢?我们拭目以待。其他的JDK木文说的都是Sim的JDK,目前常见的JDK还有JRocket和IBM的JDK。其中JRocket在10方面比Sun的高很多,不过SunJDK6.0以后提高也很大。而且JRocket在垃圾回收方而,也具有优势,其可设置垃圾回收的最大暂停时间也是很吸引人的。不过,系统Sun的G1实现以后,在这方面会有一个质的飞跃。参考资料能整理出
8、上面一些东西,也是因为站在巨人的肩上。下面是一些参考资料,供大家学习,大家有更好的,可以继续完善:)•?Java理论与实践:垃圾收集简史•?JavaSE6HotSpot[tm]VirtualMachineGarbageCollectionTuning•?ImprovingJavaApplicationPerformaneeandScalabilitybyReducingGarbageCol1ectionTimesandSizingMemor
此文档下载收益归作者所有