![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 66
yzb808
可以的
展开
-
JVM常量池
java语义中的常量池有三个概念: 1. 一个是class文件中的常量池,这里存放着类、字段和方法的名称,静态成员变量的值,字符串常量等一系列类相关的信息: Constant pool: #1 = Class #2 // com/learn/clazz/file/SampleClass #2 = Utf8 com/learn/clazz/file/SampleClass #3 = Cl...原创 2018-10-19 10:20:55 · 425 阅读 · 0 评论 -
JVM运行时内存区域
1. JVM数据区域 JVM数据区域分两类,一类生命周期随vm,一类生命周期随thread。 2. pc寄存器(线程独占) JVM在设计上支持多个线程同时执行(硬件上适配多核cpu是真正意义上的并行),为此每个线程都有属于自己的pc register,注意这里的指令寄存器并不是8086这样cpu架构里的pc register,JVM里的pc register只是抽象的概念,并不对应具体...原创 2018-10-19 10:25:33 · 164 阅读 · 0 评论 -
JVM线程栈
JVM栈中存放了一组frame(栈帧),以LIFO的方式存储,方法调用时生成一个frame,方法执行结束时删除一个frame。frame中存放方法调用时调用者的执行状态快照,在被调方法执行结束后,用于恢复方法调用前的程序执行状态。栈帧的概念在c或c++语言编译出来的汇编语言中也存在,用ESP和EBP定义栈顶和栈底。汇编和JVM的栈帧功能都一样,只是汇编的frame直接给cpu看,而JVM里的fra...原创 2018-10-19 10:48:48 · 1315 阅读 · 0 评论 -
JVM局部变量表
局部变量表是JVM线程栈中每个frame中一个组成单元(具体细节见《JVM线程栈》),存放线程在当前方法执行过程中依然有效的局部变量。局部变量表的长度在类编译过程中就能确定,这样有利于frame初始化。 void fun () { int a = 0; int b = 1; int c = 2; } fun的局部...原创 2018-10-19 11:16:40 · 867 阅读 · 0 评论 -
class文件内容解析
class文件基本数据结构: 使用javac编译后的文件是.class文件,程序运行时,class文件被classLoader加载到JVM成为class对象,随后便可以创建该类的对象。 class文件是二进制文件流,记录类相关信息,可以被JVM解析。class文件内容并不复杂,结构如下: ClassFile { u4 magic; u2 ...原创 2018-11-01 16:17:05 · 990 阅读 · 0 评论