java内存划分
java虚拟机运行时区域
程序计数器(线程私有)
作用是为了,线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,此区域是java虚拟机中唯一一个没有OOM的区域。
虚拟机栈
java方法调用,会进行压栈,调用完毕出栈。该区域有两种异常:StackOverFlowError和OutOfMemoryError
本地方法栈 虚拟栈相似,只不过为native方法服务。
java堆
1、该区域被所有线程所共享,是最大的一块内存区域
2、并不是所有对象都存储在堆上,有可能栈上分配、标量替换
3、堆可以细分为新生代(eden,from to 8:1:1默认)老年代;还可以划分线程私有TLAB(Thread Local Allocation Buffer),无论怎么划分,
其目的都是更好的回收内存,或更快的分配内存。
方法区
1、线程共享
2、存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,别名非堆。