ClassFile & JVM Memory Model

ClassFile & JVM Memory Model

ClassFile

基本组成

常量池计数器constant_pool_count

常量池数据区constant_pool[constant_pool_count-1]

访问标志 access_flags

方法计数器        methods_count  

方法信息数据区methods[methods_count]  

方法表method[]

Ⅰ.Constant Pool  cp_info

# 字面量     Literal  [1] 文本字符串   [2] final常量值 [3] 基本类型的值  [4]  其他

# 符号引用 Symbolic Reference  [1]Class和结构的完全限定名  [2] Filed 的名称和描述符  [3] Method 的名称和描述符

Ⅱ.VN Stack 虚拟机栈

[1] Current Frame-Current Method-Current Class[当前活动栈—当前方法—当前类]

[2] 功能:表示方法调用   LIFO [Last In First Out]

[3] 生命周期:线程相同

Ⅲ. Stack Frame  栈帧

##1 存储数据、储存部分过程结果

##2 处理动态链接、方法返回值、异常分派 [Dynamic Linking,Dispatch Exception]

[1] Local Variable Table局表变量表 # 编译期确认局部变量的数量,存储到Method的CODE属性

[2] Operand Stack        操作数栈     #  JVM底层字节码指令集,基于栈, 深度属性存储在Method的CODE属性

[3] Dynamic Linking      动态链接     # 指向运行时常量池的引用

[4] Return Address       方法出口     # 正常返回,恢复调用者状态 [ 局部变量、操作数栈、PCR]

                                                        # 抛出异常,或者捕获,返回值,不会返回给调用者

[..] 其他信息

Ⅳ. Method Area 方法区  [类级变量、实例变量]

[1] 运行时常量区    # 类型用到常量的有序集合    # 通过索引访问,动态连接

                         #1 直接常量   #2 符号引用:其他Type、Field、Method

[2] 类型信息     #1 完全限定名  #2 直接超类的完全限定名 #3 直接超接口的全限定名列表 

                        #4 属性: 类类型\接口类型  #5 访问修饰符 

[3] 字段信息     #1 字段名称  #2  字段类型:基本类型\引用类型  #3 字段修饰符(访问修饰符+static+transient等)

[4] 方法信息     #1 方法名称  #2 返回类型  #3 传入参数:个数、类型、顺序  #4 修饰符   #5 字节码bytecodes(VM Metod)

                         #6 操作数栈、方法在栈帧中的局部变量区的大小  #7  异常表

[5] 类变量        #1非编译时变量 (分配内存,设置默认值)    # 2 编译时变量 ( 编译时常量,复制到常量池) 【static修饰的变量】

[6] 指向类加载器的引用     # 自定义类加载器的对象,加载过程,对象的引用

[7] 指向Class实例的引用   # Class对象,加载过程,对象的引用

[8] 方法表        #定义: 一组对类实例方法的直接引用。#功能: 通过方法表-快速激活实例方法

JVM Memory Model

一、运行时数据区                    线程          储存  

[1] Program Counter Register  私有      当前执行指令、下条字节码指令的地址  [ VM指令:PC=地址 ,Native指令: PC=null]

[2] Method Area                        共享      类信息、常量、静态变量、及时编译出的代码

[3] Heap                                    共享      对象实例,JVM启动时创建,GC管理

[4] VM Stack                             私有      局部变量表、操作栈、动态链接、方法出口

                                                               调用VM Method, 创建Stack Frame栈帧

[5] Native Method Stack           私有      本地方法的局部变量表、操作栈

                                                               调用Native Method

猜你喜欢

转载自blog.csdn.net/ddhmbbklyk2018/article/details/82777846
今日推荐