Java虚拟机各内存区域的位置及功能的介绍

Posted 飞鸟集

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java虚拟机各内存区域的位置及功能的介绍相关的知识,希望对你有一定的参考价值。

Java虚拟机运行时数据区:

技术分享

相关区域介绍:

程序计数器:

  功能:当前线程所执行字节码的行号指示器。若是Java方法记录指令地址,若为Native方法,则不记录

  隔离性:线程隔离

  Error:无

Java虚拟机栈

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

  隔离性:线程隔离

  Error:线程请求的栈深度大于虚拟机所允许的深度时,抛出 StackOverflowError 异常;

     动态扩展时无法申请到足够的内存,抛出 OutOfMemoryError 异常。

  局部变量表:局部变量表所需的内存空间在编译期间分配,包含各种基本数据类型,及对象引用。

本地方法栈:

  功能:为虚拟机使用到的Native方法服务。(虚拟机栈为Java方法(也就是字节码)服务)

  隔离性:线程隔离

  Error: StackOverflowError  和 OutOfMemoryError

Java堆:

  功能:存放对象实例

  隔离性:线程共享

  Error:OutOfMemoryError

  细分:内存回收的角度:新生代、老生代

     内存分配的角度:Java堆中可能划分出多个线程私有的分配缓冲区。

  虚拟机限制:不需要连续内存空间,可以固定大小也可扩展

方法区:

  功能:存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码等。

  隔离性:线程共享

  Error:OutOfMemoryError

     虚拟机限制:不需要连续内存空间,可以固定大小也可扩展;此区域内存的回收主要针对常量池的回收和对类型的卸载。

  运行时常量池:方法区的一部分

    功能:用于存放编译期生成的各种字面量和符号引用,及翻译出来的直接引用

     特性:动态性,运行期间也可以将新的常量放入池中。

     Error:OutOfMemoryError

以上是关于Java虚拟机各内存区域的位置及功能的介绍的主要内容,如果未能解决你的问题,请参考以下文章

java虚拟机--java内存区域与内存溢出异常

图解Java内存区域及内存溢出异常

Java 虚拟机: JVM内存分区及其用途

《深入理解Java虚拟机》——Java内存区域与内存溢出异常

JVM-Java内存运行时数据区域介绍

Java虚拟机一:Java运行时内存区域及对象的创建