Java内存区域鉴赏(一)
JDK 1.8之前:
JDK 1.8 :
名称 | 包含数据类型 |
oom、Stack Overflow场景
|
是否线程共享
|
程序计数器 | 字节码指令 | 无 | 否 |
Java栈 | 栈帧(局部变量表【基础类型和对象引用】、操作数栈、方法出口、附加信息、指向运行时常量池的引用) | 线程请求虚拟机栈深度大于虚拟机所允许的深度(STF),虚拟机栈可以动态扩展,无法获取到足够的空间(OOM) | 否 |
Native栈 | 与Java栈相同 | 否 | |
方法区 | 编译器编译后的代码、类的信息(类的方法、方法信息、字段信息)、静态变量 | 用大量的类去填满方法区就好了,比如用类加载去加载jar包 | 是 |
堆 | 对象实例数据、数组、常量池 | 限制堆内存大小为20MB,不断产生新对象 | 是 |