JVM
JVM:
A a = new A()
a,放到栈 内存
new A,放到 推内存
各个线程共享的内存区域,数据共享: 堆, 方法区
各个线程不共享的内存区域: 程序计数器,虚拟机栈(栈帧),本地方法栈
程序计数器:执行.class 字节码,指示器,每个线程都有一个程序计数器。
例:执行循环后,程序往下执行的位置
虚拟机栈: 局部变量,局部变量表主要存放了编译器可知的各种数据类型。和 对象引用。
虚拟机栈会出现两种异常:StackOverFlowError (栈内存允许动态扩展)和 OutOfMemoryError(栈内存不允许动态扩展) 栈内存用完了:
本地方法栈:本地方法栈则为虚拟机使用到的 Native 方法服务 。
堆 :此内存区域的唯一目的就是存放对象实例,Java堆还可以细分为:新生代和老年代(新生代垃圾回收后,如果对象还存活,则会进入 s0 或者 s1,并且对象的年龄还会加 1)
方法区 :方法区与 Java 堆一样,是各个线程共享的内存区域。被虚拟机