深入理解JVM虚拟机
iteye_16935
这个作者很懒,什么都没留下…
展开
-
一、JDK、JRE、JVM
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库。 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。 JVM 是 Java 的核心...原创 2016-11-09 15:46:33 · 114 阅读 · 0 评论 -
二、代码编译和执行的整个过程
Java代码编译是由Java源码编译器完成,流程如下: Java字节码执行是由JVM执行引擎完成,流程如下: Java 代码编译和执行的整个过程包含了以下三个重要的机制:Java 源码编译机制类加载机制类执行机制1、Java 源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成 class 文件流...原创 2016-11-09 15:52:25 · 176 阅读 · 0 评论 -
三、Java内存区域与内存溢出
Java虚拟机在执行Java程序的过程中会把内存分为若干不同的数据区域。 程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区 1、程序计数器一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、循环、跳转等基础功能都是依赖于它的。每个线程都有一个独立的程序计数器,各个线程的计数器互...原创 2016-11-09 16:02:02 · 117 阅读 · 0 评论 -
四、类文件结构
详见: http://wiki.jikexueyuan.com/project/java-vm/class.html Class 文件中各数据项是按照上表的顺序和数量被严格限定的,每个字节代表的含义、长度、先后顺序都不允许改变。 1、 magic 与 version每个 Class 文件的头 4 个字节称为魔数(magic),它的唯一作用是判断该文件是否为一个能被...原创 2016-11-09 16:06:16 · 100 阅读 · 0 评论 -
五、类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段,加载、验证、准备、初始化这四个阶段的发生顺序是确定的。而解析阶段不一定,它的某些情况下可以再初始化阶段之后开始,这是为了支持Java语言的运行时绑定(动态绑定)。另外注意这里的...原创 2016-11-09 16:10:33 · 99 阅读 · 0 评论 -
六、类初始化
类的初始化是类加载的最后一个阶段,到了初始化阶段,才开始真正执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况立即对类进行初始化:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始话。生成这四条指令最常见的Java代码场景是:使用new关键字实例化对象时、读取或设置一个类的静态字段(s...原创 2016-11-25 15:35:04 · 90 阅读 · 0 评论