《深入理解java虚拟机》——读后笔记(一)(内存部分)
一、内存区域的划分(运行时数据区域)
①程序计数器:程序计数器是一块较小的内存区域,字节码解释器通过改变此计数器的值来选取下一条要执行的字节码指令,可以看成是当前线程执行字节码的行号指示器。线程执行时的分支、循环、跳转、异常处理、线程恢复等功能都依赖它。每条线程拥有独立的程序计数器,互不影响,独立储存。此区域没有OutOfMemory。
②Java虚拟机栈:虚拟机栈也是线程私有内存区域,生命周期和线程相同。每个方法在执行时都会创建一个栈帧,用于储存局部变量表、操作数栈、动态链接、方法出口等信息,局部变量表中储存了编译时期可知的各种数据类型、引用类型、returnAddress(指向一条字节码指令地址)。局部变量表的大小在编译期完成分配,方法运行期间不会改变局部变量表的大小。如果线程请求的深度大于虚拟机所允许的深度,会抛出StackOverflowError,如果线程动态扩展时无法申请到足够的内存会抛出OutOfMemoryError。
③本地方法栈:本地方法栈是native方法运行时区域,也会抛出StackOverflowErroar和OutOfMemoryError异常。
④Java堆:堆是虚拟机中最大的一块内存区域,被所有线程共享。主要用来储存对象实例,GC的主要场所。可以细分为老年代、新生代(包括Eden区域、from survivor区、to survivor区域)。可通过-Xmx,-Xms设置堆大小,如果堆中内存不足以分配新的对象且无法扩展,则会抛出OutOfMemoryError异常
⑤方法区域(永久带):此区域是jdk1.7及以下才有的内存区域,jdk1.8移除了永久带,增加了“元空间”。方法区也是所有线程共享的内存区域,用于储存虚拟机已加载的类信息、常量、静态常量、即时编译器编译后的代码数据。
⑥运行时常量池:方法区的一部分,Class文件中的常量池存放的编译期生成的各种字面量和符号引用,将在类加载后进入方法区的运行时常量池存放。具备动态性,在运行期间也能将新的常量放入运行时常量池中。
⑦直接内存:并不是虚拟机运行时数据区域的一部分,NIO能使用Native方法直接分配堆外内存,通过一个储存在堆中的DirectByteBuffer对象作为这块内存的引用进行操作。
《深入理解java虚拟机》——读后笔记(一)(内存部分)的更多相关文章
- 《深入理解 java 虚拟机》学习 -- 内存分配
<深入理解 java 虚拟机>学习 -- 内存分配 1. Minor GC 和 Full GC 区别 概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java ...
- 深入理解Java虚拟机(自动内存管理机制)
文章首发于公众号:BaronTalk 书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的.周志明老师的这本<深入理解 Java 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...
- 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制
Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...
- 【深入理解Java虚拟机】自动内存管理机制——内存区域划分
Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...
- 深入理解Java虚拟机之JVM内存布局篇
内存布局**** JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...
- 深入理解Java虚拟机(一)——JVM内存模型
文章目录 程序计数器 定义 作用 特点 Java虚拟机栈 定义 特点 本地方法栈 定义 Java堆 定义 特点 方法区 定义 特点 运行常量池 直接内存 总结 Java虚拟机的内存空间分为五个部分: ...
- 深入理解java虚拟机---读后笔记(垃圾回收)
运行时数据区,主要包括方法区.虚拟机栈.本地方法栈.堆.程序计数器,该部分内存都是线程隔离的. 然后和其交互的有执行引擎.本地库接口,此部分线程之间是可以共享的. 1. 引用计数算法 给对象添加一个引 ...
- 深入理解JAVA虚拟机原理之内存分配策略(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...
- 深入理解java虚拟机(6)---内存模型与线程 & Volatile
其实关于线程的使用,之前已经写过博客讲解过这部分的内容: http://www.cnblogs.com/deman/category/621531.html JVM里面关于多线程的部分,主要是多线程是 ...
- 深入理解java虚拟机(1)------内存区域与内存溢出
在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...
随机推荐
- Mf175-用户注册功能-埋点敏捷方案
在不了解埋点系统的情况下,花了五六个小时 帮一位PM朋友做的方案.记录下来.以备后续参考 Mf178-用户注册功能-埋点敏捷方案 版本号 时间 撰写人 描述 V1.0 20190515-10:50:0 ...
- 洛谷 P1266 速度限制 题解
题面 这道题可以理解为是一个分层图,也可以理解为是二维的SPFA dis[i][j]表示到达i这个点速度为j的最短路 然后跑已经死了的SPFA就好了: #include <bits/stdc++ ...
- STL string 常见用法详解
string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...
- 转 RTSP客户端模拟器(TCP方式,Python实现)
转自: http://www.cnblogs.com/MikeZhang/archive/2012/10/29/rtspTcpClient_DSS_20121029.html 由于某种需求,工作中需要 ...
- centos7上搭建NFS的实践
NFS 即network file system 可用于向k8s集群提供持久存储 最小化安装centos后 把网卡设置好了后 1.关闭防火墙 [root@NFS ~]# systemctl stop ...
- [js]EasyUI导出数据表格(Export DataGrid)
包括 'datagrid-export.js' 文件 <script type="text/javascript" src="datagrid-export.js& ...
- git clone ssh 时出现 fatal: Could not read from remote repository
一.问题及解决办法参考: 在 ubuntu 中,要把 GitHub 上的储存库克隆到计算机上时,执行如下命令: git clone git@github.com:USER-NAME/REPOSITOR ...
- css强制换行显示省略号之显示两行后显示省略号
1,首先来一个固定宽度,在一行显示,超出隐藏,显示省略号的样式 display:block; white-space:nowrap; overflow:hidden; text-overflow:el ...
- 阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结
更多内容:https://www.toutiao.com/i6599796228886626829/?tt_from=weixin&utm_campaign=client_share& ...