探索Java虚拟机
文章平均质量分 91
深入探索Java的底层世界,通过了解Java程序的运行原理、Java虚拟机的内存布局、class字节流的加载过程,为你的Java应用定制个性化JVM参数,提升Java程序运行性能。
凌澜星空
这个作者很懒,什么都没留下…
展开
-
深入理解JVM(九)——类加载的过程
通过之前的介绍可知,类加载过程共有5个步骤,分别是:加载、验证、准备、解析、初始化。其中,验证、准备、解析称为连接。下面详细介绍这5个过程JVM所做的工作。加载注意:“加载”是“类加载”过程的第一步,千万不要混淆。1. 加载的过程在加载过程中,JVM主要做3件事情:通过一个类的全限定名来获取这个类的二进制字节流,即class文件: 在程序运行过程中,当要访问一个类时,若发现这个类尚未被加载,并满原创 2016-04-26 22:24:42 · 9359 阅读 · 1 评论 -
深入理解JVM(八)——类加载的时机
类的生命周期一个类从加载进内存到卸载出内存为止,一共经历7个阶段: 加载——>验证——>准备——>解析——>初始化——>使用——>卸载其中,类加载包括5个阶段: 加载——>验证——>准备——>解析——>初始化在类加载的过程中,以下3个过程称为连接: 验证——>准备——>解析因此,JVM的类加载过程也可以概括为3个过程: 加载——>连接——>初始化C/C++在运行前需要完成预处理、编译、汇编、原创 2016-04-26 16:16:38 · 6485 阅读 · 5 评论 -
深入理解JVM(七)——Class文件结构
什么是JVM的“无关性”?Java具有平台无关性,也就是任何操作系统都能运行Java代码。之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现“一次编写,处处运行”。而JVM不仅具有平台无关性,还具有语言无关性。 平台无关性是指不同操作系统都有各自的JVM,而语言无关性是指Java虚拟机能运行除Java以外的代码!这听起来非常惊人,但JV原创 2016-04-25 20:20:27 · 12109 阅读 · 0 评论 -
深入理解JVM(六)——JVM性能调优实战
如何在高性能服务器上进行JVM调优?为了充分利用高性能服务器的硬件资源,有两种JVM调优方案,它们都有各自的优缺点,需要根据具体的情况进行选择。1. 采用64位操作系统,并为JVM分配大内存我们知道,如果JVM中堆内存太小,那么就会频繁地发生垃圾回收,而垃圾回收都会伴随不同程度的程序停顿,因此,如果扩大堆内存的话可以减少垃圾回收的频率,从而避免程序的停顿。因此,人们自然而然想到扩大内存容量。而32位原创 2016-04-24 10:48:58 · 20739 阅读 · 2 评论 -
深入理解JVM(五)——HotSpot垃圾收集器详解
极客头条用户请点击“阅读原文”,查看排版后原文。HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器。我们可以根据自己实际的应用需求选择最适合的垃圾收集器。根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率。 新生代垃圾收集器1. Serial垃圾收集器单线程 只开启一条GC线程进行垃圾回收,并且在垃原创 2016-04-20 12:32:40 · 5992 阅读 · 2 评论 -
深入理解JVM(四)——对象内存的分配策略
Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配。在Java虚拟机的五块内存空间中,程序计数器、Java虚拟机栈、本地方法栈内存的分配和回收都具有确定性,一半都在编译阶段就能确定下来需要分配的内存大小,并且由于都是线程私有,因此它们的内存空间都随着线程的创建而创建,线程的结束而回收。也就是这三个区域的内存分配和回收都具有确定性。而Java虚拟机中的方法区因为是用来存储类信息、常量原创 2016-04-19 17:29:49 · 9398 阅读 · 5 评论 -
深入理解JVM(三)——垃圾收集策略详解
Java虚拟机的内存模型分为五个部分,分别是:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。这五个区域既然是存储空间,那么为了避免Java虚拟机在运行期间内存存满的情况,就必须得有一个垃圾收集者的角色,不定期地回收一些无效内存,以保障Java虚拟机能够健康地持续运行。这个垃圾收集者就是平常我们所说的“垃圾收集器”,那么垃圾收集器在何时清扫内存?清扫哪些数据?这就是接下来我们要解决的问题。原创 2016-04-19 12:36:56 · 10640 阅读 · 3 评论 -
深入理解JVM(二)——揭开HotSpot对象创建的奥秘
对象的创建过程当虚拟机遇到一条含有new的指令时,会进行一系列对象创建的操作:检查常量池中是否有即将要创建的这个对象所属的类的符号引用;若常量池中没有这个类的符号引用,说明这个类还没有被定义!抛出ClassNotFoundException;若常量池中有这个类的符号引用,则进行下一步工作;进而检查这个符号引用所代表的类是否已经被JVM加载;若该类还没有被加载,就找该类的class文件,并加载进原创 2016-04-19 15:19:20 · 7907 阅读 · 4 评论 -
深入理解JVM(一)——JVM内存模型
JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区。下面对这五个区域展开深入的介绍。 1. 程序计数器1.1. 什么是程序计数器?程序计数器是一块较小的内存空间,可以把它看作当前线程正在执行的字节码的行号指示器。也就是说,程序计数器里面记录的是原创 2016-04-16 20:58:55 · 47447 阅读 · 13 评论