全方位认识 JVM
为什么要去了解 Java 虚拟机?
对于这个问题,我想大多数人的回答都是:因为面试。但实际上,学习虚拟机并不仅仅在于面试,而在于更深入地理解 Java 这门语言,以及为未来排查线上问题和优化打下基础。
作者:Ayue、
这篇文章描述了 Java 虚拟机的内存结构,内存每个区域作用,如何通过参数对各个区域进行控制。
作者:Ayue、
在了解 JVM 的内存结构之后,我们可以分析对象在 JVM 中是如何创建的,对象的内存布局,怎么判断对象的存活,对象的四大引用,对象的分配策略。
作者:Ayue、
对于 JVM 中产生的对象,JVM 有属于自己的一套垃圾回收机制,本文介绍了常见的垃圾回收算法,如:单线程的 Serial/Serial Old,并行的 Parallel Scavenge/Parallel Old,多线程 CMS/G1,以及一些 GC 参数。
作者:Ayue、
对象的创建过程第一步是需要检查这个类是否被类加载器加载,如果没有,那必须先执行相应的类加载过程,即把 class 加载到 JVM 的运行时数据区。
作者:Ayue、
我们写的代码,经过编译、经过类加载的各种阶段,进入了 JVM 的运行时数据区。但作为程序员真正关心是代码的执行,代码的执行其实本质上是方法的执行,站在 JVM 的角度归根到底还是字节码的执行。main 函数是 JVM 指令执行的起点,JVM 会创建 main 线程来执行 main 函数,以触发 JVM 一系列指令的执行,真正地把 JVM 跑起来。接着,在我们的代码中,就是方法调用方法的过程,所以了解方法在 JVM 中的调用是非常必要的。
作者:Ayue、
在开发,运行 Java 应用时,难免会遇到应用运行性能低效,内存泄露等问题,那么我们就需要借助分析工具去分析,优化应用系统,也就是常说的性能调优,而 JDK 自带的诊断工具可以有效的帮助我们快速定位问题。如:jps,jstack,jinfo
等。
作者:Ayue、
除了 JVM 自带的性能诊断工具,我们也可以借助其他的工具,如 Arthas,它支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab
自动补全功能,进一步方便进行问题的定位和诊断,相比 JVM 自带的性能诊断工具在观感上有一定提升。
作者:Ayue、
在熟悉了 JVM 的工作原理以及一些常用的调优工具之后,最主要的就是要在实际工作中能通过以上知识去进行优化,本文主要通过 9 个场景来演示合理的选择调优策略。
版权声明: 本文为 InfoQ 作者【Ayue、】的原创文章。
原文链接:【http://xie.infoq.cn/article/ed99b682407ddaad9f753f89e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论