0%

一次JVM调优实践

某天,测试环境突然崩了,所有服务都down了。和师傅定位问题,才发现是内存不足导致的,测试服务器内存就16g,一个MongoDb就占了3g,再加上启动起来的十几个服务,能撑这么久也不容易了。然后接着就是一通优化,清理MongoDb历史数据,从代码到JVM都需要进行优化。
关于JVM调优,从来没有实践过,只看过几篇技术博客,知道几个调优参数,基本的调优技巧都很陌生,下面就记录下这次调优经历。

JConsole的使用

JProfiler的使用

JVM相关调优参数

变量定义在循环内对程序的影响

之前对这一块儿很疑惑,我是觉得变量声名在循环内和循环外是没什么太大区别的,除非变量是一个大类。因为将变量声名在循环外会使代码看起来很杂乱,而我是有代码洁癖的。但我师傅一直强调,在写代码时最好把变量声名在循环外,这样性能才能做到最优。但是光说是没用的,还是需要实例来证明。
知乎上已经对这个有了很好的讨论,参见: 变量声明在循环体内还是循环体外的争论,以及怎样才真正叫『避免在循环体中创建对象』
阿里巴巴Java开发手册 则推荐将变量声名在循环体外。

另外注意一下,如果将变量定义在循环外的话,是否赋初始值对代码也是会有影响的,参见如下代码。

编译后的代码(.class文件)

参考文章

从实际案例聊聊Java应用的GC优化-美团技术团队