那么面试时,如何回答JVM调优?
1、主要需要你能回答两方面的问题:如何观察JVM的运行参数。比如你发现Java程序跑得慢,定期卡顿,OOM挂掉。为了找原因,你必须学会怎么去看JVM到底怎么运行的。这时需要你了解一些JVM自带的工具命令,比如jps、jstack、jhat,还有比较新的Java自带的JMC图形界面工具。通过他们你可以了解到一个Java进程有多少线程,每个线程什么状态,是不是在等着锁:进程的CPU和内存占用了多少;GC状态怎么样,Full GC频繁不频繁等等;内存中是不是有泄露,哪个地方可能泄漏了等等。
2、如何给出方案。你要明白JVM的工作原理,根据运行参数解决你的问题。比如你发现程序启动慢,你可能猜测有可能是代码没写好,就是跑得慢;也许是一开始load资源过大,而heap不大,造成反复Full GC。你必须通过运行参数来印证你的猜想,然后有针对的去解决那些问题。为此,你需要大致明白多线程的工作原理,Java内存管理,GC的工作原理(串行、CMS和G1)等。
推荐书籍《深入理解Java虚拟机》