《深入理解Java虚拟机》学习笔记1-内存数据区域
- 作用-较小的内存空间,用于存储当前线程所执行的字节码的行号
- 特性-每条线程有需要一个独立的程序计数器,各线程间互不影响,独立存储,称为"线程私有"的内存
- 作用-描述Java方法执行的内存模型,每个方法执行时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息
- 存储内容-局部变量表(8种基本数据类型、对象引用(指向对象地址的指针)、returnAddress类型(指向一条字节码指令的地址)),其所需的内存空间在编译期间完成分配
- 特性-线程私有,其生命周期与线程相同
- 异常-①线程请求栈深度大于虚拟机允许的深度-StackOverflow ②虚拟机栈动态扩展时无法申请到足够内存-OutOfMemory
- 作用-与虚拟机栈类似,存储Native方法的相关信息
- 其他-与虚拟机栈相同,线程私有
- 作用-存储对象实例,为所有对象实例及数组分配内存(注:随着技术发展,栈上分配、标量替换等优化技术使得对象实例不一定必须要在堆上分配)
- 特性-所有线程共享的内存区域,在虚拟机启动时创建,其内存空间物理上可以不连续、逻辑必须联系
- 异常-堆中没有足够内存完成实例分配,且堆也无法再扩展时-OutOfMemory
- 注:GC采用分代收集算法,回收的主要目标为Java堆与方法区
- 作用-存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(把源代码编译成和本地机器平台相关的机器语言,叫即时编译,即时编译器因为产生的是本地机器的机器码,能直接执行)编译后的代码等数据
- 特性-所有线程共享的内存区域
- 作用-存储编译期生成的各种字面量(int a=1 其中a为变量,1为字面量,字面量即能直接看出的值)和符号引用、翻译出来的直接引用
- 特性-其属于方法区的一部分,所有线程共享
- 特殊点-常量并不是一定只有编译期才能产生,运行期间也可能将新的常量放入池中,如String类的intern()方法
- 作用-NIO类(New Input/Output),引入了基于通道(Channel)与缓冲区(Buffer)的I/O方式,使其可以使用Native函数库直接分配堆外内存,通过一个存储在Java堆中的DirectbyteBuffer对象作为这块内存的引用进行操作,避免了Java堆和Native堆中来回复制程序
- 特性-不属于Java虚拟机内定义的内存区域
- 示例代码-通过Channel进行复制,可以有效提高复制效率
《深入理解Java虚拟机》学习笔记1-内存数据区域的更多相关文章
- 深入理解java虚拟机学习笔记(一)JVM内存模型
上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...
- 深入理解Java虚拟机学习笔记(一)-----Java内存区域
一 概述 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题 ...
- 深入理解java虚拟机学习笔记(二)垃圾回收策略
上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略. 一. ...
- 深入理解java虚拟机读书笔记1--java内存区域
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随 ...
- 深入理解Java虚拟机 - 学习笔记 1
Java内存区域 程序计数器 (Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作时就是通过 ...
- 转载: Java虚拟机:运行时内存数据区域、对象内存分配与访问
转载: https://blog.csdn.net/a745233700/article/details/80291694 (虽然大部分内容都其实是深入理解jvm虚拟机这本书里的,不过整理的很牛逼 ...
- 深入理解Java虚拟机一:运行时数据区域
根据<Java虚拟机规范(第2版)>的规定,Java虚拟机管理的内存包括下图几个运行时数据区域: 1.程序计数器 程序计数器(Program Counter Register ...
- 深入理解Java虚拟机学习笔记(二)-----垃圾收集器与内存分配策略
写在前面 本节常见面试题: 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何 ...
- 深入理解Java虚拟机读书笔记8----Java内存模型与线程
八 Java内存模型与线程 1 Java内存模型 ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节. ---此处的变量和J ...
- 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象
一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE? Java技术体系包括: · Java程序设计语言: · 各种硬件平台上的 ...
随机推荐
- jmeter解决不同线程组之间传递参数问题
首先在第一个线程组里讲你需要保存的值放入到jmeter的某个属性中,属性名名字自己定义,如上图的token , props.put("token", token),第二个参数必须是 ...
- jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the install tool.
jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the ...
- Unity中脚本的执行顺序总结(@WhiteTaken)
(Editor)以上是Unity官方文档中的截图,脚本在被挂载到物体上,会启用Editor的方法Reset. (Initialization)当执行脚本开始,初始化的过程中,依次执行的是Awake-& ...
- mybatis: 利用多数据源实现分库存储
之前写过一篇mybatis 使用经验小结 提到过多数据源的处理方式,虽然简单但是姿势不太优雅,今天介绍一些更美观的办法: spring中有一个AbstractRoutingDataSource的抽象类 ...
- [LeetCode] Gas Station 加油站问题
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- 《Markdown 一些基本语法》
Markdown编辑器是在上学期学习Java时写博客用来编辑文字内容以及形式的,但其实当时掌握Markdown的语法却是极少的,也仅仅是会使用几级标题这样简单的语法,就和当时学习git上传代码一样,也 ...
- .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息
在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...
- echarts-案例
关系图 http://echarts.baidu.com/echarts2/doc/example/force1.html http://www.cnblogs.com/spring_wang/p/4 ...
- jQuery中的100个技巧
1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. < ...
- python三大类型数据筛选
如何在列表,字典,集合中根据条件刷选数据 说明: 本文分析的类型: 列表 字典 集合 结合每种类型筛选数据的方法的不同,区分出方法间的差异. 一.列表案例 需求:过滤掉列表中的负数. li = [1, ...