码迷,mamicode.com
首页 > 其他好文 > 详细

JVM内存区域划分与管理

时间:2014-09-11 20:55:32      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   使用   java   ar   文件   数据   sp   

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。

bubuko.com,布布扣

 

 Class loader子系统的作用:根据给定的全限定名类名(如 java.lang.Object)来装载class文件的内容到 Runtime data area中的method area(方法区域)。Java程序员可以extends java.lang.ClassLoader类来写自己的Class loader。  

Execution engine子系统的作用:执行classes中的指令。任何JVM specification实现(JDK)的核心都是Execution engine,不同的JDK例如Sun 的JDK 和IBM的JDK好坏主要就取决于他们各自实现的Execution engine的好坏。

Native interface组件:与native libraries交互,是其它编程语言交互的接口。当调用native方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界,所以也很容易出现 JVM无法控制的native heap OutOfMemory。

 

1、PROGRAM COUNTER REGISTER

程序计数器可以当前字节码执行的行号指示器,它跟字节码解释器一起工作。程序计数器可以得到字节码的位置,然后可以得到字节码。通过解释器又可以改变程序计数器的值。去得到下一个字节码。所以分支、循环、转跳、异常处理、线程恢复等基础功能都需要依赖这个程序计数器来完成。

2、JAVA STACK

用于存储局部变量表(局部变量表存放了编译器可知的各种基本数据类型)、操作数栈、动态链接、方法出口等信息。

3、NATIVE MOTHED STACK

它跟JAVA STACK差不多,不过NATIVE MOTHED STACK只是为本地虚拟机使用到的Native方法服务的。

4、HEAP

Java堆是被所有线程共享的一块区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实际都在这里分配内存。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。如果从内存回收的角度来看,由于收集器基本都采用分代收集算法,所以Java堆中还可以细分为:新生代和老年代。由于这个过分复杂,这里就不讨论了。

5、METHOD AREA

方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量表。

 

参考书籍:深入理解Java虚拟机

 

JVM内存区域划分与管理

标签:blog   http   io   使用   java   ar   文件   数据   sp   

原文地址:http://www.cnblogs.com/chenjianxiang/p/3967189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!