JVM 详解
引言本文主要介绍,有关JVM(Java Visual Mechine Java虚拟机)的知识。 运行时数据区什么是运行时数据区通过命令行javac,对 *.java源文件 进行编译;然后在由命令 java 运行 *.java,而java源码文件进行编译成class文件,计算机将class文件打散放入JVM数据区中。如下图所示 ? ? 运行时怎么划分数据区?class文件中到底有多少数据类型?对象、常量、静态变量、普通的成员变量、方法、局部变量、父类…… 怎么划分数据区?在对应的官方文档中(按JavaSE 1.8为例),按照?2.5. Run-Time Data Areas?中描述的可以分为以下几个数据区
Heap 堆Heap 堆 --> 用于存储Java对象 (对象/数组) ?Method Area 方法区Method Area 方法区 --> 用于存储 类的信息、常量、变量、编译后的代码 ? ? ? ? 方法的执行移动是由线程执行的:线程执行方法的过程可以用一个数据结构来表示【先进后出】——栈 Java Virtual Machine Stacks 虚拟机栈一个线程可以表示一个虚拟机栈,而方法的执行可以通过压栈的方式进行,具体如下图所示: 具体虚拟机栈的工作,可以讲class文件进行反编译,可以看到计算机指令的全过程(字节码指令会把一行代码拆分为很多步骤)。? javap -c *.class,至于指令具体的内容可参考官方文档中对应语言的含义 栈帧:包含局部变量表、操作数栈 The?
|