深入理解Java虚拟机(一)、Java内存区域与内存溢出异常
Java虚拟机所管理的内存包括以下几个运行时数据区:

程序计数器(PCR):
1、是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器
2、为线程私有
3、执行Java方法有PCR,执行native方法时,PCR为空(Undefined)
4、该内存区域不会出现OME(Out Of Memory Exception)
Java虚拟机栈:
1、各线程私有,生命周期与线程相同
2、JVMS描述的是Java方法执行的内存模型,局部变量表,操作数栈
3、局部变量表中存储了基本类型,对象,和返回地址类型,long和double类型占两个slot
4、存在SOE(StackOverflowError)和OME
本地方法栈:
1、为虚拟机用到的本地方法服务
2、虚拟机规范对本地方法栈无具体规定,具体的虚拟机可以自由实现规定
3、有SOE和OME
Java堆:
1、内存最大的一块区域,所有线程共享,VM启动时创建,唯一目的:存放对象实例
2、也成为GC堆,是垃圾收集器管理的主要区域
3、GC堆可以处于物理上不连续的内存空间中,只要逻辑上连续即可
4、有OME
方法区:
1、所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据
2、别名非堆,是堆的一个逻辑部分
3、内存逻辑上连续即可,可以选择固定大小或可扩展,或不是想垃圾收集
4、有OME
运行时常量池:
1、是方法区的一部分,存放类文件,常量池信息
2、具有动态性,可以在运行期或编译期将常量放入池中
3、有OME
直接内存:
1、是使用native函数库直接分配的堆外内存,java堆中的DBB(DirectByteBuff)对象作为这块内存的引用
2、会受到本机内存限制
3、有OME
深入理解Java虚拟机(一)、Java内存区域与内存溢出异常的更多相关文章
- 深入理解java虚拟机系列(一):java内存区域与内存溢出异常
文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上 ...
- 深入理解Java虚拟机之Java内存区域与内存溢出异常
Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...
- 深入理解Java虚拟机之图解Java内存区域与内存溢出异常
Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...
- 深入理解Java虚拟机之Java内存区域随笔
1.java内存区域与内存溢出异常 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域:1.程序计数器,2.栈(虚拟机栈和本地方法栈 ),3.堆,4.方法区(包含 ...
- 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常
第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域
- 深入理解java虚拟机-第二章:java内存区域与内存泄露异常
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...
- 深入理解Java虚拟机(1)--Java内存区域
运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用 ...
- 深入理解java虚拟机---->java内存区域与内存溢出异常
2. java内存区域于内存溢出异常 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java而言,则把内存 ...
- 《深入理解Java虚拟机》之(一、内存区域)
一.java的体系构成: Java的技术体系主要由支撑java程序运行的虚拟机.提供各种开发领域接口支持的java api.java编程语言及许多第三方java框架(如Spring .Struts等) ...
- 深入了解Java虚拟机(1)java内存区域与内存溢出异常
java内存区域与内存溢出异常 一.运行时数据区域 1.程序计数器:线程私有,用于存储当前所执行的指令位置 2.Java虚拟机栈:线程私有,描叙Java方法执行模型:执行方法时都会创建一个栈帧,存储局 ...
随机推荐
- Debug 常见问题总结(持续更新)
2016-9-24 1.for循环变量做参数一定要小心,嵌套一个for变量不要用同一个. 2.字符串处理要打好下标的草稿,不然很容易搞混.(方法待讨论). 3.整形比较比较容易忽略=的问题 ,> ...
- vs2013单元测试练习过程
1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测试项目.取名为UnitTestDemoTest 创建完 ...
- Foundation框架—数据类(NSData)
一 NSData的使用 .string -> data NSString *str = @"changxiangweilai"; NSData *data = ...
- springMVC学习笔记(五)
一.使用Ajax调用 1.1 Controller返回的类型为text类型的方式. @RequestMapping("/getPerson") public void getPer ...
- java中 sleep 与 wait 的区别
1.所属类不同 sleep是Thread类的方法: wait是Object类的方法: 2.功能不同 sleep是线程用来控制自身流程的,在调用sleep()方法的过程中,线程不会释放对象锁: wait ...
- javascript算法
代码运行环境: nodejs + mochajs /* *选择排序 *每次查找数组最小数据 *将最小数据排到左侧 */ var assert = require('assert'); describe ...
- nodeJs中创建服务器
var http=require('http'); var httpObj=http.createServer(function(req,res) { console.log('someBody:' ...
- Sql Server 2012 Enterprise Edition 企业版 迅雷 下载地址
Sql Server 2012 Enterprise Edition 企业版 迅雷 下载地址 版本号 cn_sql_server_2012_enterprise_edition_x86_x64_dvd ...
- android超快模拟器Ggenymotion的安装和配置
原文地址:http://xiaochu.blog.51cto.com/1048262/1639613 Genymotion是一款运行速度快,且易于使用的android模拟器,非常适合与android程 ...
- LDA(文档主题模型)
LSA latent semantic analysis 映射词-文档到一个低维隐语义空间 比较词和文档在低纬空间的相似性 topic 是 Vocab 上的概率分布(符合多项式分布) 文档到主题的一个 ...