当前位置:文档之家› Java内存区域划分、内存分配原理

Java内存区域划分、内存分配原理

本文由我司收集整编,推荐下载,如有疑问,请与我司联系
Java 内存区域划分、内存分配原理
2014/11/16 2448 运行时数据区域
Java 虚拟机在执行Java 的过程中会把管理的内存划分为若干个不同的数据区域。

这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程
的启动而存在,而有的区域则依赖线程的启动和结束而创建和销毁。

Java 虚拟机包括下面几个运行时数据区域:
程序计数器
程序计数器是一块较小的区域,它的作用可以看做是当前线程所执行的字节码的行号指示器。

在虚拟机的模型里,字节码指示器就是通过改变程序计数器的值
来指定下一条需要执行的指令。

分支,循环等基础功能就是依赖程序计数器来完成的。

由于java 虚拟机的多线程是通过轮流切换并分配处理器执行时间来完成,一个处理器同一时间只会执行一条线程中的指令。

为了线程恢复后能够恢复正确的
执行位置,每条线程都需要一个独立的程序计数器,以确保线程之间互不影响。


此程序计数器是“线程私有”的内存。

如果虚拟机正在执行的是一个Java 方法,则计数器指定的是字节码指令对应的地址,如果正在执行的是一个本地方法,则计数器指定问空undefined。

程序计数器区域是Java 虚拟机中唯一没有定义OutOfMemory 异常的区域。

Java 虚拟机栈
和程序计数器一样也是线程私有的,生命周期与线程相同。

虚拟机栈描述的是Java 方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。

每一个方法被调用的过程就对应
一个栈帧在虚拟机栈中从入栈到出栈的过程。

相关主题