Java虚拟机内存管理


本篇文章将对Java虚拟机的内存模型进行总结,各个部分的详细内容在后边也会逐步扩展说明。


Java虚拟机内存管理_第1张图片


     从上图中我们可以看出,在虚拟机运行时的数据内存可分为线程共享区和线程独占区。顾名思议,线程共享区代表每个线程都可以共享的内存区,线程独占区,即每一个线程都独有的内存区。

 

下面分别进行详细介绍:


(1)程序计数器


Java虚拟机内存管理_第2张图片


从上图中也对程序计数器也简单的做了介绍,但要注意的是程序计数器是Java虚拟机中唯一的一块不会出错error的内存区域。


(2)Java虚拟机栈


Java虚拟机内存管理_第3张图片


栈帧:当每个方法执行的时候都会创建一个栈帧,Java虚拟机栈就是用来存放栈帧的容器。

  

下面先来看一个图来进行介绍。

Java虚拟机内存管理_第4张图片


       从图中我们可以看出,Java虚拟机栈的容量大小也是有限的,当创建的栈帧超出了他的容量大小,将会报StackOverFlow异常,即栈溢出异常。常见的如 无止境的递归调用,即会出现这个错误。

      与此同时,Java虚拟机栈也会报OutOfMemory异常,当向堆申请内存超出堆本身内存的大小时,将会发生这个错误。


(3)本地方法栈


Java虚拟机内存管理_第5张图片


(4)方法区


Java虚拟机内存管理_第6张图片


(5)Java堆

    

Java虚拟机内存管理_第7张图片


需要说明的是-Xmx -Xms虚拟机参数时为了对虚拟机堆内存进行控制大小的参数。

你可能感兴趣的:(深入理解JVM,深入理解JVM的优化)