记忆memory JVM Memory
JVM Memory
· Stack Memory (栈内存) <_edition//l>: 虚拟机的每一个线程都有一个私有的栈 当一个方法被调用时 下面内容被作为一个Frame (帧) <_edition//l>被创建并且被压入栈中
+ 局部变量 包括基本数据类型 对象的引用和返回值地址
+ 一个自己的操作栈 帧内局部变量进行运算时使用 也用于传递方法的参数和接受方法的返回值
+ 一个当前方法所在类的Runtime constant pool (常量池) <_edition//l>的引用

方法调用完成时 帧出栈 并销毁 无论方法是正常结束还是有未捕获的异常
· Heap Memory(堆内存) <_edition//l> : 虚拟机的堆内存保存的是对象 类变量以及实例变量 它被所有线程共享 常说的垃圾回收就是对堆内存的回收
+ +
| Stack Memory | > 线程私有
+ +
| ^ | +
+ | + |
| | | |
+ Heap Memory + |
| | | | > 线程共享
+ | + |
| v | |
+ + |
| Method Area | +
+ +
当JVM加载一个class时 将该类的一些信息保存到Method Area 包括Runtime constant pool 方法数据 方法和构造器代码 域等 Runtime constant pool 则 包括类名 父类名 静态变量等
Method Area在逻辑上属于Heap 不过它垃圾回收与Heap可能不同 取决于JVM的实现
lishixinzhi/Article/program/Java/hx/201311/26358