jvm 运行时数据区域(读书笔记)
java虚拟机运行是区域主要分为五个
- 程序计数器
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区
1.程序计数器
程序计数器是一块比较小的内存空间。可以看作是当前现场所执行的字节码的行号指示器。每条线程都有一个独立的程序计数器,在各线程之间是独立存储的,这类内存区域为“线程私有”内存。如果是一个Native方法这个计数器值为空(Undefined)。
2.java虚拟机栈
虚拟机栈也是线程私有的,它的生命周期和线程相同。每个java方法在执行的时候都会创建一个栈帧。用于储存局部变量表,操作数栈,动态链接,方法出口信息等。 局部变量表存放了编译期可预知的各种基本数据类型,对象引用,returnAddress类型。 局部变量表所需要的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部空间是完全确定的,在方法运行期间不会改变局部变量的大小。
3.本地方法栈
本地方法栈和虚拟机栈功能基本相同,只是针对的对象不同。它针对的是虚拟机使用到的Native方法服务。在虚拟机规范中对它没有强制规定,可以把它合并到虚拟机栈中。
4.堆
堆是java虚拟机所管理的最大的一块内存区域。java堆是本所有的线程共享的一块内存区域,在虚拟机启动时创建。这块内存区域唯一目的就是存放对象实例,几乎所有的对象实例都创建在这里。 java堆是垃圾收集器的主要管理区域,从垃圾收集器基本采用分代收集算法来区分堆区域,堆区域还可以细分为:新生代和老年代;再细致一点有分Eden空间、From Survivor空间、To Survivor空间等。从内存分配的角度来看,线程共享的java堆中可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB)
5.方法区
方法区也是各个线程共享的区域,它用于储存已经被虚拟机加载的类的信息、常量、静态变量、即时编译器编译后的代码数据等。很多人也把这个区域叫永久代。
6.运行时常量
运行时常量池是方法区的一部分。clas文件中除了有类似的版本、字段、方法、接口等信息描述外,还有一项信息是常量池,用于存放编译期产生的各种字面量和符号引用,这部分在类加载后进入方法区的运行时常量池中存放,还会把翻译出来的直接引用也存储在运行时常量池中。
7.直接内存
直接内存不是虚拟机运行时数据的一部分,也不在java虚拟机规范中定义的内存区域。在JDK1.4中加入了NIO类,引入了基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在java中的DirectByteBuffer对象作为这块内容的引用操作。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
前端小报 - 201901 月刊
订阅 / 投稿:https://github.com/txd-team/monthly本期小编:x-cold (尹挚) 新闻快报 重磅消息:Github 宣布私有仓库免费,同期还上线了星标话题(topics) 的功能 2019 年伊始,GitHub 正式宣布开放无限制创建私有存储库,并开始提供统一的企业版 GitHub 服务,微软正在开始加速 toB 企业服务的布局。开发者们一片叫好声,可谓年度最佳的程序员福利了。 软件技术 B2B 公司Idera.inc收购 Travis CI Travis CI 将结合 Idera 公司其本身的数据库 / 开发者 / 测试等工具发挥更大的商业优势。不过使用免费版的社区同学也不用紧张,Travis CI 依然保证对开源软件免费的策略,并且其开源证书不会修改 (MIT),更多可以参考详细的官方公告。 需
- 下一篇
全民学后端快餐教程(3) - 使用MyBatis访问数据库
全民学后端快餐教程(3) - 使用MyBatis访问数据库 上节我们学习了JdbcTemplate来访问数据库,比起使用原始的JDBC来,还是方便很多的。至少不用去处理大量的Exception。但是我们还是可以通过一些框架,使工作量变得更少一些。这方面的主流选择是MyBatis. MyBatis简介 MyBatis是由iBatis发展而来的。iBatis最早是由Clinton Begin于2001年开发,后来在2004年捐赠给了Apache基金会。2010年,iBatis团队决定从Apache项目中分离出来,并改名myBatis. MyBatis是支持SQL, 存储过程和高级映射的持久层框架。 用MyBatis访问数据库 略不幸的是,myBatis没有Spring Boot的官方支持,但是myBatis团队自己提供了与Spring Boot的
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)