JVM-运行时数据区

   JVM在运行Java代码时,会把内存分为几个模块即数据区来使用,数据区的内容以下图所示:html

1. PC寄存器:java

  JVM支持程序多线程执行。而操做系统的任务调度采用的是时间片轮询的抢占式调度方式,也就是说,某一个肯定的时刻,一个处理器只能处理一条线程中的指令。所以,线程切换后如何恢复到原来正确的位置,即是经过每一个线程各自的寄存器来实现的。在各线程中寄存器独立,互不干扰。
  若是线程执行的方法不是native的,那PC寄存器保存的就是Java虚拟机正在执行的字节码指令的地址,若是该方法是native的,那寄存器的值就是undefined(null),此内存区域是惟一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError状况的区域。算法

2. JAVA虚拟机栈:
  java虚拟机栈也是Java线程私有的,它的生命周期与线程同样,用于存储栈帧,主要包括两部分,方法中的局部变量和方法执行过程当中产生的中间结果。每个方法从调用直到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。多线程

  由于除了栈帧的出栈和入栈以外,Java 虚拟机栈不会再受其余因素的影响,因此栈帧能够在堆中分配,Java 虚拟机栈所使用的内存不须要保证是连续的。oracle

  JVM规范容许VM Stack要么是一个固定大小,要么动态扩展来知足要求。若是JVM栈是一个固定的大小,当栈被建立的时候每个栈大小能够自由设置。而在动态扩展状况下,能够控制最大或最小内存;spa

  Java虚拟机栈可能会发生以下异常状况:操作系统

  • 若是线程请求分配的栈容量超过 Java 虚拟机栈容许的最大容量时,Java 虚拟机将会抛出一个 StackOverflowError 异常;
  • 若是 Java 虚拟机栈能够动态扩展,但扩展时没法申请到足够的内存,或者在建立新的线程时没有足够的内存去建立对应的虚拟机栈,那 Java 虚拟机将会抛出一个 OutOfMemoryError 异常;

3. Java堆
对于大多数应用来讲,堆是Java虚拟机所管理的内存中最大的一块。堆是可供全部线程共享的一块内存区域,是在虚拟机启动的时候建立的。它惟一的目的就是存储对象实例,几乎全部的对象实例都在这里分配内存。
Java堆是垃圾回收器管理的主要区域,不少时候也被翻译为GC堆。而从内存分配的角度来看,因为如今收集器基本都采用分代收集算法,因此Java堆还能够细分为:新生代,老年代,永久代等等。
Java堆的容量能够是固定大小的,也能够根据需求动态扩展,而且Java堆能够处于物理上不连续的内存空间中。只要逻辑上是连续的便可,就像咱们的磁盘空间同样。
堆中可能会发生的异常:线程

  • 若是实际所需的堆大小超过了系统设置的最大堆容量,那JVM会抛出OutOfMemoryError异常;

4. 方法区
  方法区与堆同样,是各个线程共享的内存区域,存储了每个类的结构信息,如运行时常量池,静态变量,常量,构造方法和普通方法的字节码内容等等;方法区也是在虚拟机启动的时候被建立。
  JVM规范堆方法区的限制很是宽松,它能够做为堆的一个逻辑组成部分,拥有和堆大部分相同的性质,如能够选择固定大小和可扩展,也能够选择不实现垃圾回收。
  一样,当方法区没法知足内存分配需求时,会抛出OutOfMemoryError异常;翻译

5. 运行时常量池
首先,运行时常量池位于方法区内,属于方法区的一部分。存放的是编译期生成的各类字面量和符号引用。在类和接口被加载到虚拟机后,对应的运行时常量池就被建立出来。。
在建立类和接口的运行时常量池时,可能会发生以下异常状况:htm

  • 当建立类或接口的时候,若是构造运行时常量池所须要的内存空间超过了方法区所能提供的最大值,那 Java 虚拟机将会抛出一个 OutOfMemoryError 异常。

6. 本地方法栈
  本地方法栈与虚拟机栈所发挥的做用是很是类似的,它们的区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。因此说,当虚拟机使用到其余语言的时候,就会使用到本地方法栈。
  而若是Java虚拟机不支持native方法,而且本身也不依赖传统栈的话,能够无需支持本地方法栈。若是支持本地方法栈,那这个栈通常会在线程建立的时候按线程分配。
  本地方法栈和虚拟机栈性质相似,能够固定大小,也能够动态扩展,异常抛出也同样。

 

The Java® Virtual Machine Specification地址(其中包含了JDK6,JDK7,JDK8,JDK9各个版本):

https://docs.oracle.com/javase/specs/index.html

 

参考自:《深刻理解JAVA虚拟机》

相关文章
相关标签/搜索