JVM内存区域和内存溢出异常
来源:互联网 发布:瓦楞纸箱设计软件 编辑:程序博客网 时间:2024/05/16 15:26
程序计数器
程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。
该区域是唯一一个在java虚拟机规范中没有任何OutOfMemoryError情况的区域。
java虚拟机栈
该区域和程序计数器区域一样是线程私有的区域。虚拟机栈表示的是java方法执行的内存模型:每个方法在执行的时候会创建一个栈帧,用于存储方法的局部变量表,操作数栈,动态链表,方法出入口信息。
其中局部变量表存放各种基本的数据类型和对象引用。
一般该区域有StackOverflowError(线程请求的栈深度超过虚拟机允许的深度)和OutOfMemoryError(虚拟机栈进行动态扩容失败)
本地方法栈
本地方法栈和java虚拟机栈其实是一样的,只是两者服务的对象不一样,本地方法栈是正对native方法而言,java虚拟机栈是针对程序运行的java方法。
出现的错误也和java虚拟机栈一样,StackOverflowError和OutOfMemoryError。
堆
堆区是jvm管理的最大一片区域,该区域是线程共享的,主要是对象实例和数组分配的区域。
堆区分为新生代和老年代,其中新生代分为Eden区、From Survivor区和To Survivor区。
当堆无法分配的时候会抛出OutOfMemoryError错误。
方法区
方法区也是和堆区一样式线程共享的,该区域主要存储加载的类信息、常量、静态变量、即时编译以后的代码。
该区域也经常被称为永久区。针对该区域的回收主要是对常量池回收和类的卸载。
当该区域不足的时候会抛出OutOfMemoryError错误。
运行时常量池
该区域是方法区的一部分。
直接内存
直接内存是不是虚拟机的运行时数据区的一部分,也不是JVM规范中定义的内存区域。
该区域主要在NIO使用,避免在java堆和native堆中来回拷贝,也就是经常所说的零拷贝策略。
- JVM内存区域和内存溢出异常
- JVM--内存区域和内存溢出异常
- 【JVM】内存区域分配机制和内存溢出异常
- JVM内存区域与内存溢出异常
- JVM内存区域与内存溢出异常
- JVM----内存区域及溢出异常
- java内存区域和内存溢出异常
- Java内存区域和内存溢出异常
- Java内存区域和内存溢出异常
- java内存区域和内存溢出异常
- JVM之Java内存区域与内存溢出异常
- jvm(1)----java内存区域与内存溢出异常
- JVM学习—内存方区域与内存溢出异常
- JVM--JAVA内存区域与内存溢出异常(未完)
- JVM-java内存区域与内存溢出异常
- jvm学习记录 -- Java内存区域与内存溢出异常
- Understand JVM:Java内存区域模型与内存溢出异常
- [JVM]Java内存区域与内存溢出异常
- mysql explain 的type解释
- Android 7.1 应用快捷方式(ShortcutManager的使用)
- SpringMVC实现查询结果下载为CSV文件
- [python]leetcode(105). Construct Binary Tree from Preorder and Inorder Traversal
- 直接插入、冒泡、快速、简单选择、堆、归并排序算法
- JVM内存区域和内存溢出异常
- 3301: [USACO2011 Feb] Cow Line 康托展开
- HTML5拖放
- 属性动画的几种实现方式
- hdu 5428(质因数分解)
- 重定向和请求转发的区别
- 【内外网映射】通过外网ip来访问虚拟机服务器【转载】
- (初学者)关于Python学习中Windows环境中遇到的info-zip问题的解决
- 英特尔® 嵌入式显卡驱动程序