程序计数器

程序计数器是线程私有的区域,很好理解嘛~,每个线程当然得有个计数器记录当前执行到那个指令。占用的内存空间小,可以把它看成是当前线程所执行的字节码的行号指示器。如果线程在执行Java方法,这个计数器记录的是正在执行的虚拟机字节码指令地址;如果执行的是Native方法,这个计数器的值为空(Undefined)。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

Java虚拟机栈

与程序计数器一样,Java虚拟机栈也是线程私有的。其生命周期与线程相同。如何理解虚拟机栈呢?本质上来讲,就是个栈。里面存放的元素叫栈帧,栈帧好像很复杂的样子,其实它很简单!它里面存放的是一个函数的上下文,具体存放的是执行的函数的一些数据。执行的函数需要的数据无非就是局部变量表(保存函数内部的变量)、操作数栈(执行引擎计算时需要),方法出口等等。

执行引擎每调用一个函数时,就为这个函数创建一个栈帧,并加入虚拟机栈。换个角度理解,每个函数从调用到执行结束,其实是对应一个栈帧的入栈和出栈。

注意这个区域可能出现的两种异常:一种是StackOverflowError,当前线程请求的栈深度大于虚拟机所允许的深度时,会抛出这个异常。制造这种异常很简单:将一个函数反复递归自己,最终会出现栈溢出错误(StackOverflowError)。另一种异常是OutOfMemoryError异常,当虚拟机栈可以动态扩展时(当前大部分虚拟机都可以),如果无法申请足够多的内存就会抛出OutOfMemoryError

本地方法栈

本地方法栈与虚拟机栈所发挥的作用很相似,他们的区别在于虚拟机栈为执行Java代码方法服务,而本地方法栈是为Native方法服务。与虚拟机栈一样,本地方法栈也会抛出StackOverflowError和OutOfMemoryError异常。

Java堆

Java堆可以说是虚拟机中最大一块内存了。它是所有线程所共享的内存区域,几乎所有的实例对象都是在这块区域中存放。当然,睡着JIT编译器的发展,所有对象在堆上分配渐渐变得不那么“绝对”了。

Java堆是垃圾收集器管理的主要区域。由于现在的收集器基本上采用的都是分代收集算法,所有Java堆可以细分为:新生代和老年代。在细致分就是把新生代分为:Eden空间、From Survivor空间、To Survivor空间。当堆无法再扩展时,会抛出OutOfMemoryError异常。

方法区

方法区存放的是类信息、常量、静态变量等。方法区是各个线程共享区域,很容易理解,我们在写Java代码时,每个线程度可以访问同一个类的静态变量对象。由于使用反射机制的原因,虚拟机很难推测那个类信息不再使用,因此这块区域的回收很难。另外,对这块区域主要是针对常量池回收,值得注意的是JDK1.7已经把常量池转移到堆里面了。同样,当方法区无法满足内存分配需求时,会抛出OutOfMemoryError。 
制造方法区内存溢出,注意,必须在JDK1.6及之前版本才会导致方法区溢出,原因后面解释,执行之前,可以把虚拟机的参数-XXpermSize和-XX:MaxPermSize限制方法区大小。

最新文章

  1. python第十八天-----Django基础
  2. C_中使用SendMessage
  3. EPPLUS之外的选择,EXCEL的操作(NPOI,POI(java))
  4. SQL Server 2008 R2密钥序列号
  5. 删除共享内存后key为0x00000000的问题
  6. 基于visual Studio2013解决C语言竞赛题之0902文件查找
  7. 图片上传预览 支持html5的浏览器
  8. Linux下tomcat的安装详解
  9. MVC下form表单一次上传多种类型的图片(每种类型的图片可以上传多张)
  10. Javascript学习九
  11. 读书笔记(一)—— 浅析浏览器渲染过程和html中的文件加载
  12. JavaScript(四)操作符
  13. 谈谈 final finally finalize 区别
  14. luogu P3237 [HNOI2014]米特运输
  15. jetty去掉项目名称访问
  16. AI-序列化-查-做接口
  17. STL中的容器介绍
  18. 2019 Android 高级面试题总结
  19. POJ.1743.Musical Theme(后缀数组 倍增 二分 / 后缀自动机)
  20. [Bayes] Point --> Line: Estimate "π" by R

热门文章

  1. myecliese加大内存
  2. scrapy基础知识之制作 Scrapy 爬虫 一共需要4步:
  3. @ApiImplicitParam注解
  4. Android Native 内存泄漏系统化解决方案
  5. 【UR #7】水题走四方 题解
  6. [Usaco2007 Open]Fliptile 翻格子游戏题解
  7. 【拓扑排序】威虎山上的分配-C++
  8. BFM使用 - 获取平均脸模型的68个特征点坐标
  9. 个人永久性免费-Excel催化剂功能第54波-批量图片导出,调整大小等
  10. 高德网络定位之“移动WiFi识别”