美文网首页
Java运行时数据区

Java运行时数据区

作者: 游牧族人 | 来源:发表于2018-05-07 18:57 被阅读20次

程序计数器,虚拟机栈,本地方法栈,堆,方法区。

1.程序计数器(线程私有)

程序计数器是一块较小的内存空间,他可以看做是当前线程所执行的字节码的行号指示器。分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。
如果当前运行的是一个java方法,那么程序计数器记录的是正在执行的虚拟机字节码指定的地址,如果运行的是一个本地的native方法,那么计数器的值为空。

2.虚拟机栈(线程私有)

虚拟机栈描述的是java方法的内存模型,每个java方法在执行的时候都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用到结束,都对应着一个栈帧在虚拟机栈中入栈和出栈的过程。
局部变量表:
存放着编译期可知的各种基本数据类型(int,float...)、对象的引用和方法返回地址。局部变量表的大小是在编译期间就决定下来的,运行时不会改变局部变量表的空间大小。

3.本地方法栈(线程私有)

与虚拟机栈的作用类似,不过只是本地方法栈为程序执行native本地方法服务。

4.堆(线程共享)

java堆是jvm启动时创建的一块内存区域,该区域只用来存放对象实例和数组。java堆可以出于物理上不连续的内存区域,只要逻辑上是连续的即可。java堆是垃圾收集器的主要管理区域。

5.方法区(线程共享)

java方法区用来存储已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。运行时常量池就位于方法区中。

OOM:
OOM:内存溢出异常。
一般在java程序运行过程中,除了程序计数器之外,其他的java运行时数据区都有可能抛出OOM异常。
虚拟机栈和本地方法栈中,当线程请求的栈深度大于虚拟机所允许的栈深度时,会抛出StackOverflowError异常。如果虚拟机栈支持扩展并且即使扩展之后也无法满足程序运行需要的内存,便会抛出OutOfMemoryError异常。
如果java程序在堆上没有完成实例分配且堆也无法完成自身扩展时,程序便会抛出OutOfMemoryError异常。
当方法区无法满足内存分配需求时,便也会抛出OutOfMemoryError异常。

相关文章

  • JVM

    JVM虚拟机运行时数据区(每个区都存储什么信息) JAVA7和JAVA8的运行时数据区JAVA7:虚拟机栈/本地方...

  • Java方法执行过程

    运行时数据区 Java 运行时数据区共分为以下几个部分:程序计数器、Java 虚拟机栈、本地方法栈、Java堆和方...

  • 线程安全之可见性问题

    Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多...

  • JVM_运行数据区

    JAVA的运行时数据区,老生常谈。 我们常说的JAVA的运行时数据区包括:程序计数器、虚拟机栈、本地方法栈、方法区...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • 《深入java虚拟机》-内存区域与内存溢出异常

    一、运行时数据区域 1. java内存区模型 注 :1. 绿色方框的数据区由所有线程共享2. 运行时数据区的白色区...

  • 11 jvm 问题

    1,说下jvm 运行时数据区? 不同虚拟机的运行时数据区可能略微有所不同,但都会遵从java 虚拟机规范,java...

  • Java虚拟机以及垃圾回收总结

    Java虚拟机主要由三大部分组成:类加载器、运行时数据区和执行引擎 运行时数据区:由方法区、堆、Java虚拟机栈、...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • 【JAVA】深入理解虚拟机之虚拟机类加载机制

    Java程序运行时,数据会分区存放,JavaStack(Java栈)、 heap(堆)、method(方法区)。 ...

网友评论

      本文标题:Java运行时数据区

      本文链接:https://www.haomeiwen.com/subject/fkbvrftx.html