JVM调优、GC优化思路与问题解决方法
查看JVM的参数:java -XX:+PrintCommandLineFlags -version
以HBase作为场景来分析GC优化思路
调优首先看场景,比如HBase的虚拟机调优,HBase比较注重于高响应,所以垃圾回收器的选择时首先要考虑的,会选择ParNew+CMS或者G1这是没有什么问题的。
那么再考虑,比如RegionServer的堆内存一般比较大毕竟有多个Memstore来维护内存数据的有序性,所以一般是个大堆,用G1这种增量式回收(Mixed GC)更加适合于大堆的应用,同时减少CMS由于标记清除算法产生的内存碎片使得Full GC次数多的问题。
选定垃圾回收器后,要根据场景中对象的特征进行下一步的考虑,比如HBase的RPC产生的对象是照生夕灭的是属于新生代中的,而那些缓存数据是在一段时间内长时间存在的。所以,在JVM和GC参数调优的过程中,要注重于新生代对象的快速淘汰和避免老年代对象过多产生Full GC上。
那些比如JVM参数,堆的大小设置(Xms、Xmx)、运行在server模式下是必须的。其次,在编程习惯上也可以做优化,比如字符串拼接用StringBuilder/StringBuffer代替