Java内存分为:堆内存(heap)和 栈内存(stack)
HelloWorld.java 编译->HelloWorld.class
通过classloader 加载到JVM虚拟机中
1.程序计数器(Program Counter Register)
是虚拟机中较小的一块内存空间
记录某一线程被CPU挂起时,记录代码执行到的位置,方便CPU重新执行线程,从哪行指令开始执行
程序计数器没有OOM
是线程私有的,每个线程都有独立的程序计数器
生命周期是随着线程创建而创建,随着线程的结束而死亡
执行java方法时,是记录正在执行的虚拟机字节码指令地址
native方法,计数器值为空(Undefined)
2.虚拟机栈
虚拟机栈是线程私有的,与线程生命周期同步
StackOverFlowError 栈溢出
OutOfMemoryError 内存溢出
JVM 基于栈的解释器执行的
DVM 是居于寄存器解释器执行的
3.栈帧(Stack Frame)
每一个线程在执行某个方法时,都会为这个方法创建一个栈帧
局部变量表
操作数栈
动态链接
返回地址 (帮助当前方法恢复它的上层方法执行状态)
1.正常退出 return
2.异常退出
4.本地方法栈
5.Java堆(Heap)
新生代 (1.Eden 2.Survivor)
老年代
JVM管理内存最大的一块,存放对象实例
GC管理的主要区域
所有线程共享的区域
6.方法区
主要存储:已被JVM加载的类信息(版本、字段、方法、接口)、常量、静态变量、即时编译后的代码、数据
该区域是被各个线程共享的内存区域
本文深入解析Java内存模型,包括堆内存、栈内存、程序计数器、虚拟机栈、栈帧、本地方法栈、Java堆及方法区。阐述了各部分的作用、特性及线程私有共享区别。

被折叠的 条评论
为什么被折叠?



