运行时数据区域(java虚拟机在运行时对内存的划分)
分为:方法区,虚拟机栈,本地方法栈,堆,程序计数器。
1. 程序计数器
作用:线程执行字节码的行号指示器。
特点:a.程序计数器对线程来说是私有的,每个线程的程序计数器是独立的。
b.只记录java方法的执行情况,不记录native执行情况。
c.没有任何outofmemoryerror的区域。
2.java虚拟机栈
作用:java方法执行的内存模型,每一个方法在执行的时候,都会 创建一个栈帧,用于记录方法的信息,每一个方法从调用到执行的过程对应着栈帧在虚拟机栈中的入栈到出栈的过程。
特点: a.线程私有,与线程的生命周期相同。
b.会有StackOverflowError和OutOfMemoryError。
3.本地方法栈
作用:执行虚拟机使用的native本地方法。
特点:会抛出StackOverflowError和OutOfMemoryError异常。
4.java堆
作用:存放对象实例
特点: 1.java虚拟机管理的最大一块内存。
2.被所有线程共享的一块内存。
5.方法区
作用:存放已经被虚拟机加载的类信息,常量,静态变量,及时编译器编译后的代码。
特点:1.线程共享
2.会抛出OutOfMemoryError异常。