深入理解java 虚拟机第三版跟读总结

tech2023-05-31  49

第一小结

1.内存:数据区域{虚拟机进程,用户线程}

线程隔离数据区(私有):橙色部分

共享区域 : 蓝色部分

   

 1)程序计数器: java方法 : 记录正在执行的虚拟机字节码指令地址

                             本地(Native)方法 : 空值

2)java虚拟机栈(服务于java方法) : 方法执行时, 创建一个栈用在存局部变量表,操作类栈,动态链接,方法接口等信息。

     i)局部变量表所需空间在编译期间分配, 存储在局部变量槽(slot)主要有以下信息:

          ii)基本数据类型,对象引用,returnAddress类型

 

3)本地方法栈 : 服务于本地(Native)方法

4)java 堆(GC堆):所有线程共享,虚拟机其定时创建用于存放对象实例

5)方法区 :共享区域,用于存储已被虚拟机加载的类型信息,常量,静态变量

     JDK 7 之前方法区又称永久代,JDK7之后方法区移除了常量和静态变量

    JDK 8 称为元空间 (主要剩下类型信息)

  i)方法区回收主要是常量池的回收和类型的卸载。

     OutofMerroyError : 无法满足新的内存分配需求。

ii)运行时常量池: 方法区一部分

一个class文件包括 类版本,字段,方法,接口 等,常量池表 (用于存放编译期生成的各种字面量与符号引用)

7)直接内存

 

第二小结

1)创建对象:

     i)new指令-->常量池中定位-->类的符号引用-->类是否加载解析和初始化-->no的话执行类加载过程

     ii)分配内存 : 指针碰撞,空闲列表

 

最新回复(0)