· Stack Memory (栈内存) <_edition/html/l>: 虚拟机的每一个线程都有一个私有的栈当一个方法被调用时下面内容被作为一个Frame (帧) <_edition/html/l>被创建并且被压入栈中 + 局部变量包括基本数据类型对象的引用和返回值地址 + 一个自己的操作栈帧内局部变量进行运算时使用也用于传递方法的参数和接受方法的返回值 + 一个当前方法所在类的Runtime constant pool (常量池) <_edition/html/l>的引用 方法调用完成时帧出栈并销毁无论方法是正常结束还是有未捕获的异常 · Heap Memory(堆内存) <_edition/html/l> : 虚拟机的堆内存保存的是对象类变量以及实例变量它被所有线程共享常说的垃圾回收就是对堆内存的回收 ++ | Stack Memory | > 线程私有 ++ | ^ | + +|+ | | | | | +Heap Memory+ | | | | |> 线程共享 +|+ | | v | | ++ | | Method Area | + ++ 当JVM加载一个class时 将该类的一些信息保存到Method Area包括Runtime constant pool 方法数据方法和构造器代码域等Runtime constant pool 则 包括类名父类名静态变量等 Method Area在逻辑上属于Heap不过它垃圾回收与Heap可能不同取决于JVM的实现 当通过new Class()方式创建一个实例时JVM在Method Area寻址到该类的基 本信息 同时进行相关实例的初始化(包括实例变量)存贮在Heap中 |