Java虚拟机的内存划分(简)
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
JVM的内存划分(详):
先看图:
图解:
要点,说明:
- 线程共享:方法区、堆; 线程隔离(线程独占):虚拟机栈、本地方法栈、程序计数器(寄存器)
- 方法区 也是一种特殊的 堆结构
- 方法区用于存储:已被虚拟机加载的类信息、常量、静态变量、动态生成的类等数据。
- 栈(虚拟机栈)还包含:基本数据类型、对象的引用
- jdk1.6下字符串常量池是在永久区(方法区)中,是与堆完全独立的两个空间
jdk1.7,1.8下字符串常量池已经转移到堆中了,是堆中的一部分内容 - 方法区的内存回收主要是针对常量池以及类型的卸载,但是类型卸载在实际场景中的条件相当苛刻。