Java虚拟机内存管理


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




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

 

下面分别进行详细介绍:


(1)程序计数器




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


(2)Java虚拟机栈




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

  

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



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

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


(3)本地方法栈




(4)方法区




(5)Java堆

    



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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务