码迷,mamicode.com
首页 > 编程语言 > 详细

深入理解Java虚拟机——java内存区域与内存溢出异常(一)

时间:2017-08-11 19:00:10      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:rtu   处理器   运行时   解释器   一个   地方   text   创建   方法区   

Java虚拟机全称:java virtual machine;是Java开发语言中,用来运行Java字节码文件的平台;通俗的讲,就是一个程序。它提供对Java字节码的解释及运行,从而使Java语言能独立于各个系统平台。

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间。Java虚拟机所管理的内存包括以下几个运行时数据区域:
1)程序计数器: 可以看作是当前线程所之行的字节码的行号指示器。字节码解释器就是通过改变计数器的值来选取下一条需要执行的字节码指令。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的。在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此每个线程都需要一个独立的程序计数器。
2)Java虚拟栈:与程序计数器一样,也是线程私有的。生命周期和线程相同。
3)本地方法栈:为虚拟机使用到的Native方法服务。
4)Java堆:Java堆十倍所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域用于存放对象实例。Java堆是垃圾收集器管理的主要区域。
5)方法区:同样也是所有线程共享的区域,用于存储已被虚拟机加载的数据。
6)运行时常量池:是方法区的一部分。用于存放编译期生成的各种字面量和符号引用。
7)直接内存:

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,则必须先执行相应的类加载过程。(p45)
 

深入理解Java虚拟机——java内存区域与内存溢出异常(一)

标签:rtu   处理器   运行时   解释器   一个   地方   text   创建   方法区   

原文地址:http://www.cnblogs.com/lchzlp/p/7347458.html

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