首页 > 编程语言 > 详细

Java内存区域

时间:2020-08-05 00:11:55      阅读:92      评论:0      收藏:0      [点我收藏+]

运行时数据区域

技术分享图片

 

 1、程序计数器

Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定是时刻,一个处理器(对于多核处理器来说都是一个内核)都只会执行一条线程中的指令。

所以为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,这类内存区域称为”线程私有内存“。

2、Java虚拟机栈

“线程私有”且生命周期与线程相同。

虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

3、本地方法栈

与虚拟机栈所发挥的作用是相似的,区别是虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈则是为虚拟机使用到本地(Native)方法服务。

4、Java堆

是虚拟机所管理的内存中最大的一块,被所有线程共享的一块区域,在虚拟机启动时创建,唯一目的是存放对象实例。

Java堆是垃圾收集器管理的内存区域。

Java堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续。

5、方法区

与Java堆相似,是线程共享的内存区域,不过是用于存储被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。

 6、运行时常量池

它是方法区的一部分。Class文件中有常量池表,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。

收到方法区内存的限制,当常量池无法再申请到内存时会抛出OutOfMemoryError异常。

 

Java内存区域

原文:https://www.cnblogs.com/codercql/p/13435653.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!