×
新网 > 虚拟主机 > 正文

JAVA虚拟机管理内存

  • 作者:新网
  • 来源:新网
  • 浏览:100
  • 2018-05-10 13:21:43

虚拟机的运行时数据区管理着内存,分为五个区域。方法区,虚拟机栈,本地方法栈(有些虚拟机把这两个栈合二为一),堆,程序计数器。

   JAVA虚拟机管理内存

<div>  虚拟机的运行时数据区管理着内存,分为五个区域。方法区,虚拟机栈,本地方法栈(有些虚拟机把这两个栈合二为一),堆,程序计数器。

IC564317.jpg
  程序计数器: 每个线程处理Java方法执行位置的程序计数器所在内存区域。本地方法计数器为空,属于线程私有,即线程各自的程序计数器互不干扰。这个不会弹溢出异常,其余区域都会弹溢出异常。
  Java虚拟机栈 :Java方法执行时,创建一个栈帧,保存局部变量表,方法出口等方法相关信息,属于线程私有区域。
  本地方法栈:与Java虚拟机栈相似,本地方法执行时,保存方法相关信息。
  Java堆:存放对象的内存区域。里面可以分为线程共享区域和线程私有区域。
  方法区:属于线程共享区域,存储类信息,静态变量,代码。
  当创建线程过多时,会弹出OutOfMemory异常,这是因为系统内存不足以分配Java虚拟机请求的栈内存。如果在方法中死循环爆出异常,这是StackOutOfMomory异常。栈的大小超出虚拟机规定大小。
  堆又分为老年代和新生代(方法区被称作永久代),老年代主要采用标记整理方法清理内存,新生代通过复制法清理内存。复制法思想将新生代区分为eden区和两个survior区,清理eden区和其中一个survior区,将存活的引用复制到另一个survior区,如果survior区大小不够,向老年代借空间存储。minorGC和FullGC不同之处,minorGC只清理新生代,FullGC连老年代也清理。
  判断对象已死的算法是根搜索算法。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

免费咨询获取折扣

Loading