JVM--Java内存区域与内存溢出异常
来源:互联网 发布:java设置日期格式 编辑:程序博客网 时间:2024/05/22 16:05
Java虚拟机针对Java程序运行的时候,将内存分成不同的区域,这些区域对于不同的数据的存储分工明确,Java虚拟机将运行时区域分成以下六个区域。
一、程序计数器
定义:程序计数器是记录当前线程执行的虚拟机字节码的行号指示器。
特点:程序计数器是每个线程所特有的,并且程序计数器是Java虚拟机分区中唯一一块没有OutOfMemoryError的区域。
二、Java虚拟机栈
定义:用于存放方法局部变量表、操作数栈、动态链接、方法出口,所谓局部变量表就是方法的各种基本类型和对象引用。
特点:Java虚拟机栈也是各个线程所独有的,其生命周期和线程相同。
异常信息:如果线程请求的栈深度大于虚拟机的栈深度那么将抛出StackOverFlowError,由于Java虚拟机栈是可以扩展的,当扩展已经无法满足申请的栈空间的时候,将会抛出OutOfMemoryError异常。
三、本地方法栈
定义:本地方法栈是使用到native方法而产生的类似Java虚拟机栈的一块内存地址,在很多虚拟机中,通常将本地方法栈和Java虚拟机栈划分在一起。
异常信息:和java虚拟机栈类似,本地方法栈也会产生StackOverFlowError和OutOfMemoryError两个异常。
四、Java堆
定义:Java堆是用来存放对象实例的,与前面的Java虚拟机栈对比,我们可以发现,针对对象的引用,我们存放在Java虚拟机栈中,而针对对象的实例我们存放在Java堆中。
特点:Java堆是所有线程共享的,并且是垃圾回收的主要地点。
异常信息:如果对象实例没有被完全存储,而且Java堆已经无法再进行扩展了,那么这个时候就会产生OutOfMemoryError异常。
五、方法区
定义:方法区是用来存放Java虚拟机加载的类信息、静态数据、常量、即时编译器编译后的代码信息。
特点:这个区域是所有线程所共享的。这个区域很多人也喜欢称其为永久代,但是这就并不意味着这个区域不进行垃圾回收了,这个区域的垃圾回收主要是针对常量池和类型卸载进行的。
异常信息:当方法去无法满足内存分配需求的时候,将发生OutOfMemoryError异常。
六、运行时常量池
定义:在类文件中不仅仅有类的版本,字段、方法、接口等信息的描述,还有字面量和符号引用。针对类的版本、接口、字段和方法这些信息存放在方法区中,我们可以从上面看出来。而针对字面量和符号引用,是存放在常量池中的。
特点:常量池属于方法区的一个部分。
异常信息:从上面的描述,我们可以看出常量池属于方法区的一个部分,那么常量池肯定也受到方法区的限制,从而当常量池无法申请到它所需要的内存的时候就会产生OutOfMemoryError异常。
- JVM内存区域与内存溢出异常
- JVM内存区域与内存溢出异常
- JVM之Java内存区域与内存溢出异常
- jvm(1)----java内存区域与内存溢出异常
- JVM--JAVA内存区域与内存溢出异常(未完)
- JVM-java内存区域与内存溢出异常
- jvm学习记录 -- Java内存区域与内存溢出异常
- Understand JVM:Java内存区域模型与内存溢出异常
- [JVM]Java内存区域与内存溢出异常
- 【JVM】Java内存区域与内存溢出异常
- JVM--Java内存区域与内存溢出异常
- JVM开篇---Java内存区域与内存溢出异常
- Java内存区域与内存溢出(JVM)
- JVM:Java内存区域与内存溢出
- JVM 学习笔记1 JAVA内存区域与溢出异常
- java内存区域与内存溢出异常
- Java内存区域与内存溢出异常
- java内存区域与内存溢出异常
- 面试总结之抽象类与接口的对比
- 第6章 组件
- Java学习笔记-代理模式
- unity3d c# lua数据分布思路
- 如何在网页中通过@font-face中嵌入中文字体(Web font)
- JVM--Java内存区域与内存溢出异常
- android页面跳转之——activity
- Compiling FreeType for iPhone
- gulp——初学
- JVM知识点小结
- sas hash 小示例
- 各大IT公司校园招聘程序猿笔试、面试题集锦
- 计算机网络之读Internet网发展史 读后感
- 自定义控件之侧滑面板