Java内存分布

来源:互联网 发布:php 微信群发接口 编辑:程序博客网 时间:2024/06/04 08:58

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。

Java内存分布

1.程序计数器

程序计数器是一块较小的内存空间。字节码解释器工作时就是改变这个计数器的值来取下一条需要执行的字节码指令。Java虚拟机可以支持多条线程同时执行,而每一条Java虚拟机线程都有自己的程序计数器,因此这些计数器之间互不影响,独立存储。在任意时刻,一条Java虚拟机线程只会执行一个方法的代码,这个正在被线程执行的方法称为该线程的当前方法。

如果方法不是native的,那么程序计数器就保存Java虚拟机正在执行的字节码指令的地址。如果方法是native的,那么程序计数器的值是undefined。

此区域不会发生OutOfMemoryError。

2.Java虚拟机栈

与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同。每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每个方法从调用到执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈。

0 0