首页 > 代码库 > 深入理解Java虚拟机——java内存区域与内存溢出异常(一)
深入理解Java虚拟机——java内存区域与内存溢出异常(一)
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内存区域与内存溢出异常(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。