1.深入理解java虚拟机--java内存区域

 2019-12-22 10:47  阅读(748)
文章分类:JVM

运行时数据区域

java虚拟机所管理的内存将会分为以下几个区域,如图:

2019120001313\_1.png

程序计数器

1.可以看成当前线程所执行的字节码的行号指示器。

2.每条线程都需要一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存

java虚拟机栈

1.线程私有的

2.生命周期同线程一样

3.java虚拟机栈描述的是Java方法执行的内存模型(为java方法服务)

4.java程序员主要关注的 则是 栈中的局部变量表部分

局部变量表–存放编译期可知的各种数据类型, 对象引用 和 return Address(指向一条字节码指令的地址)

局部变量表 所需的内存空间在编译期间完成分配,在方法运行期间不会改变大小

本地方法栈

  1. 与java虚拟机栈发挥的作用非常相似
  2. 区别: 本地方法栈为虚拟机使用到的Native方法服务

java堆

  1. 唯一的目的是存放对象

2.是所有线程共享的一块区域

3.在虚拟机启动时创建

方法区

1.线程共享的区域

2.用于存储已被虚拟机加载的 类信息,常量,静态变量,即时编译编译后的代码等数据

3.当方法区无法满足内存分配需求时,会抛出 OutOfMemoryerror 异常

运行时常量池

1.运行时常量池是方法区的一部分

2.用于存放编译期生成的各种字面量和符号引用

3.运行时常量池 相对于 class 常量池的 另一个特点是 具备动态性,运行期间也可能将新的常量放入池中

4.当常量池无法再申请到内存时,会抛出OutOfMemeryError 异常

直接内存

1.本机直接内存的分配不受java堆大小的限制 , 收到本机总内存大小以及处理器寻址空间的限制

2.当各个内存区域总和大于物理内存限制,会导致动态扩展中出现 OutOfMemoryError 异常

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 1.深入理解java虚拟机--java内存区域

相关推荐