jvm内存模型


jvm内存模型

1.虚拟机栈

2.程序计数器

程序计数器和虚拟机栈是线程私有的

3.本地方法栈

主要用于处理本地方法栈

4.堆

对象的存储空间,jvm管理的空间最大的一块内存。

4.1 堆空间划分

堆空间可以划分为新生代和老年代,与之相对的有Eden空间,From Survivor空间和ToSurvivor空间。
new 对象的步骤
1. 在堆内存中创建对象实例
2. 为成员变量赋初始值
3. 将对象的引用返回

堆内存分配内存两种算法
1. 指针碰撞:堆中内存空间由一个指针分割,一侧为使用,一侧为空闲。
    对应的gc算法 :serial parnew 
2. 空闲列表:堆中内存已使用和未使用空间交织在一起,有一列表记录空间使用状况。new 对象时会在空闲列表里分配内存,同时修改列表。

对象的结构
1. 对象头
2. 实例数据
3. 对齐填充

访问对象的方式
1. 使用句柄的方式
2. 使用直接指针的方式 

5.方法区(元数据区)

命令行工具:jmap jstat jcmd
图形化工具:jmc jhat jv

6.运行时常量池

方法区的一部分内容

7.直接内存


Author: 向天歌
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source 向天歌 !
  TOC