方法区:
各个线程共享的区域,存放类信息、常量、静态变量
堆:
线程共享的区域,我们的类的实例就放在这个区域,可以想象你的一个系统会产生很多实例,因此java堆的空间也是最大的。如果java堆空间不足了,程序会抛出OutOfMemoryError异常。
栈:
线程私有的区域,它的生命周期与线程相同,一个线程对应一个java栈,每执行一个方法就会往栈中压入一个元素,这个元素叫“栈帧”,而栈帧中包括了方法中的局部变量、用于存放中间状态值的操作栈递归如果深度很深,就会执行大量的方法,方法越多java栈的占用空间越大。
本地方法栈:
角色和java栈类似,只不过它是用来表示执行本地方法的,本地方法栈存放的方法调用本地方法接口,最终调用本地方法库,实现与操作系统、硬件交互的目的。
堆:
新生代:
Eden Survivor1 Survivor2
存活对象少
复制算法
老年代:
存活对象多
标记-清除/标记-整理
JVM内存模型(方法区,堆,栈,本地方法栈)
于 2020-08-21 17:19:25 首次发布