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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解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内存区域与内存溢出异常的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解Java虚拟机》笔记02:Java内存区域与内存溢出异常

深入理解JAVA虚拟机读书笔记——Java内存区域与内存溢出异常

深入理解Java虚拟机Java内存区域与内存溢出异常

深入理解Java虚拟机二之Java内存区域与内存溢出异常

深入理解java虚拟机-java内存区域与内存溢出异常

深入理解java虚拟机-----java内存区域以及内存溢出异常