• 类在加载过程中,根据类别分布在不同的区域.

# 前言

  • 类在加载过程中,根据类别分布在不同的区域

# 运行时数据区

虚拟机-内存分布

  • 运行时数据区大体分为线程共享数据区:随着虚拟机启动而创建,退出而销毁,为所有子线程共享;线程独享数据区:随着线程启动与结束而创建与销毁,每个线程间隔离.
    • 线程共享数据区
      • 堆:存放对象实例,数组
        • 新生代
          • Eden
          • From(Survivor0)
          • To(Survivor1)
        • 老年代
      • 元数据区 (方法区 | 永生带): 采用 ** 堆外内存 (本地内存)** 静态变量,静态方法,常量,成员方法,类模板,类信息 (版本号…)
    • 线程独享数据区
        • 局部变量表:基础类型变量 (byte, char, short, int, long, float, double, boolean), 对象句柄 (方法参数,局部变量)
        • 操作数栈
        • 动态链接
        • 返回地址
      • 本地方法栈:本地 native 的内存模型 (非 Java 方法)
      • 程序计数器 (PC 寄存器): 当前线程所执行字节码的行号指示器,通过改变该计数器来选取下一条将执行的字节码指令

  • 堆初始容量默认为 1/64 物理内存 (-Xms -XX:InitialHeapSize)
  • 堆最大容量默认为 1/ 4 物理内存 (-Xmx -XX:MaxHeapSize)
  • 新生代初始容量默认为堆初始容量 1/3 (-Xmn -XX:NewSize)
  • 新生代最大容量默认为堆最大容量 1/3 (-XX:MaxNewSize)
  • 老年代初始容量默认为堆初始容量 2/3 (-XX:OldSize)

# 总结

  • 元数据区:存放类模板;堆:存放类实例;栈:函数计算

# 引用

  • 深入理解 Java 虚拟机 (第二版 - 周志明)
  • 深入剖析 JVM
  • Java 内存区域
  • 栈帧结构
Edited on Views times