JVM自动内存管理:内存区域基础概念
1.课程概要
(1)Java虚拟机和Java内存区域概述
(2)Java虚拟机栈和本地方法栈
(3)Java堆
(4)方法区和运行时常量池
(5)直接内存
2.Java虚拟机运行时数据区
运行时数据区的划分(5):
(1)Java虚拟机栈
(2)本地方法栈
(3)程序计数器
(4)Java堆
(5)方法区(包含运行时常量池)
程序计数器(Program counter Register)
1.是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器
2.如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;
如果正在执行的是Native方法,这个计数器值则为空
3.此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoreyError情况的区域
Java虚拟机栈和本地方法栈
Java虚拟机栈的概念和特征
(1)线程私有
(2)后进先出栈
(3)存储栈帧,支持java方法的调用、执行和退出
(4)可能出现OutOfMemoryError异常和StackOverflowError异常、
栈帧的概念和特征
1)Java虚拟机栈中存储的内容,它被用来存储数据和部分过程的数据结构,
同事也被用来处理动态连接,方法返回值和异常分派
2)一个完整的栈帧包含:局部变量表、操作数栈、动态连接信息、方法正常完成和
异常完成信息
局部变量表概念和特征
1)由若该个Slot组成,长度由编译期决定
2)单个Slot可以存储一个类型为boolean、byte、char、short、float、reference
和returnAddress 的数据,两个Slot可以存储一个类型为long或者double的数据
3)局部变量表用于方法间参数传递,以及方法执行过程中存放基础数据类型的值
和对象的引用
操作数栈的概念和特征
1)是一个后进先出栈,由若干个Entry组成,长度由编译期决定
2)单个Entry即可以存储一个Java虚拟机中国定义的任意数据类型的值,包括
long和double类型,但是存储long和double类型的Entry深度为2,其他类型的深度为1
3)在方法执行过程中,栈帧用于存储计算阐述和计算结果;在方法调用时,操作数栈用来准备调用方法的参数以及接收方法返回结果
本地方法栈的概念和特征
(1)线程私有
(2)作用是支撑Native方法的调用、执行和退出
(3)后进先出栈
(4)可能出现OutOfMemoryError异常和StackOverflowError异常
(5)有一些虚拟机(如HotSpot)将Java虚拟栈和本地方法栈合并实现
Java堆
Java堆的特征
1.给所有线程共享的内存区域
2.通常是Java虚拟机中最大的一块内存区域
3.作用是作为Java对象的主要存储区域
4.JVMS明确要求该区域需要实现自动内存管理,即常说的GC,但是不限制采用哪种算法和技术去实现
(新生代,老年代,永久代)分带算法
5.可能出现OutOfMemoryError异常
从栈到堆的关联过程
方法区(永久代)和运行时常量池
方法区的特点
1.全局共享
2.作用是存取Java类的结构信息(常量,静态变量,方法,字段等)
3.JVMS不要求该区域实现自动内存管理,但是商用Java虚拟机都能够自动管理该区域的内存
4.可能出现OutOfMemoryError
运行时常量池的特征(是方法区中的一部分)
1.全局共享
2.是方法区的一部分
3.作用是存取Java类文件常量池中的符号信息
4.可能出现OutOfMemoryError异常
HotSpot方法区实现的变迁
永久代与方法区
1.在JDK1.2~JDK6,HotSpot使用永久代实现方法区
2.在JDK7开始,HotSpot开始了移除永久代的计划
1)符号表被移动到Native Heap中
2)字符创常量和类的静态引用被移动到Java Heap中
3.在JDK8开始,永久代已经被元空间(Metaspace)所代替
直接内存
直接内存的概念和特征
1.并非JVMS定义的标准Java运行时内存区域
2.随JDK1.4中加入NIO被引入,目的是背面在Java堆和Native堆中来回复制数据带来的性能损耗
3.全局共享
4.能被自动管理,但是在检测手段上可能会有一些简陋
5.可能出现OutOfMemoryError异常
JVM自动内存管理:内存区域基础概念的更多相关文章
- C学习笔记(11)--- 可变参数,浅谈内存管理 【C基础概念系列完结】
1.可变参数(variable arguments): 可变参数允许您定义一个函数,能根据具体的需求接受可变数量的参数. int func(int, ... ) (函数 fun ...
- jvm是如何管理内存的
1.JVM是如何管理内存的 Java中,内存管理是JVM自动进行的,无需人为干涉. 了解Java内存模型看这里:java内存模型是什么样的 了解jvm实例结构看这里:jvm实例的结构是什么样的 创建对 ...
- Spark内核| 调度策略| SparkShuffle| 内存管理| 内存空间分配| 核心组件
1. 调度策略 TaskScheduler会先把DAGScheduler给过来的TaskSet封装成TaskSetManager扔到任务队列里,然后再从任务队列里按照一定的规则把它们取出来在Sched ...
- 内存管理 & 内存优化技巧 浅析
内存管理 浅析 下列行为都会增加一个app的内存占用: 1.创建一个OC对象: 2.定义一个变量: 3.调用一个函数或者方法. 如果app占用内存过大,系统可能会强制关闭app,造成闪退现象,影响用户 ...
- 【原创】android内存管理-内存泄漏原因
转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5704596.html 先讲一下内存泄漏的概念:内存泄露是指无用对象持续占有内存,或者内存得不到及时 ...
- Java中的垃圾回收机制&内存管理&内存泄漏
1. Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存. 为什么呢? 因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所 ...
- 构造函数,C++内存管理,内存泄漏定位
构造函数 1.构造顺序 虚基类构造函数,基类构造函数,类对象构造函数,自己的构造函数 2.必须使用初始化列表 (1) 引用成员,常量成员: (2) 基类没默认构造函数(自己重载覆盖了), (3)类对象 ...
- jvm是如何管理内存的 .ZT
http://blog.csdn.net/u014421556/article/details/51744044
- Linux内核内存管理-内存访问与缺页中断【转】
转自:https://yq.aliyun.com/articles/5865 摘要: 简单描述了x86 32位体系结构下Linux内核的用户进程和内核线程的线性地址空间和物理内存的联系,分析了高端内存 ...
随机推荐
- triggerHandler不执行事件默认值
<input type="text" /> $('input').triggerHandler('focus');
- 联想笔记本thinkpad按F2不能直接重命名
联想笔记本thinkpad按F2不能直接重命名,而是Fn+F2. 解决: 按一下Fn+Esc(一般在左上角)
- NOI 4978 宠物小精灵之收服(二维背包)
http://noi.openjudge.cn/ch0206/4978/ 描述 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事. 一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物 ...
- google nmt 实验踩坑记录
最近因为要做一个title压缩的任务,所以调研了一些text summary的方法. text summary 一般分为抽取式和生成式两种.前者一般是从原始的文本中抽取出重要的word o ...
- gpg: no valid OpenPGP data found. 解决办法
在Ubuntu14.04 server(amd64)上面安装ros,运行命令 wget http://packages.ros.org/ros.key -O - | sudo apt-key add ...
- Springboot 编码规范
1.规范的意义和作用 编码规范可以最大限度的提高团队开发的合作效率 编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 编码规范可以 ...
- MVC 枚举绑定 DropDownList
/// <summary> /// 枚举转化下拉列表数据集 /// </summary> /// <param name="type">类型&l ...
- 《剑指offer》第三十九题(数组中出现次数超过一半的数字)
// 面试题39:数组中出现次数超过一半的数字 // 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例 // 如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, ...
- (转)HapMap简介
1.人类基因组的HapMap和国际HapMap计划 (1)何谓HapMap HapMap是Haplotype Map 的简称,Haplo意为单一,在基因组中专指来自父母的一对染色体中的一条.Haplo ...
- Silverlight自定义控件系列 – TreeView (2) 基本布局和States
TreeView的树形结构都以缩进方式显示,现在来完成这部分. 首先,要定义出每个节点上都包含什么东西.先看看Win7资源管理器的TreeView: 图2.1 资源管理器 一个通用的TreeView至 ...