一、内存区域的划分(运行时数据区域)

  ①程序计数器:程序计数器是一块较小的内存区域,字节码解释器通过改变此计数器的值来选取下一条要执行的字节码指令,可以看成是当前线程执行字节码的行号指示器。线程执行时的分支、循环、跳转、异常处理、线程恢复等功能都依赖它。每条线程拥有独立的程序计数器,互不影响,独立储存。此区域没有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虚拟机》——读后笔记(一)(内存部分)的更多相关文章

  1. 《深入理解 java 虚拟机》学习 -- 内存分配

    <深入理解 java 虚拟机>学习 -- 内存分配 1. Minor GC 和 Full GC 区别 概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java ...

  2. 深入理解Java虚拟机(自动内存管理机制)

    文章首发于公众号:BaronTalk 书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的.周志明老师的这本<深入理解 Java 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...

  3. 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  4. 【深入理解Java虚拟机】自动内存管理机制——内存区域划分

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  5. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  6. 深入理解Java虚拟机(一)——JVM内存模型

    文章目录 程序计数器 定义 作用 特点 Java虚拟机栈 定义 特点 本地方法栈 定义 Java堆 定义 特点 方法区 定义 特点 运行常量池 直接内存 总结 Java虚拟机的内存空间分为五个部分: ...

  7. 深入理解java虚拟机---读后笔记(垃圾回收)

    运行时数据区,主要包括方法区.虚拟机栈.本地方法栈.堆.程序计数器,该部分内存都是线程隔离的. 然后和其交互的有执行引擎.本地库接口,此部分线程之间是可以共享的. 1. 引用计数算法 给对象添加一个引 ...

  8. 深入理解JAVA虚拟机原理之内存分配策略(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...

  9. 深入理解java虚拟机(6)---内存模型与线程 & Volatile

    其实关于线程的使用,之前已经写过博客讲解过这部分的内容: http://www.cnblogs.com/deman/category/621531.html JVM里面关于多线程的部分,主要是多线程是 ...

  10. 深入理解java虚拟机(1)------内存区域与内存溢出

    在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...

随机推荐

  1. Docker结合Jenkins构建持续集成环境

    1.环境说明: jenkins+svn:192.168.71.142 测试环境:192.168.71.145 生产环境:192.168.71.148 操作系统:centos7. Maven3. Tom ...

  2. Markdown之基础语法

    Markdown是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式 优点: 1.因为是纯文本,所以只要支持Markdown的地方都能获得一样的编辑效果,可以让作者摆脱排 ...

  3. 闭包问题for(var i=0;i<10;i++){ setTimeout(function(){ console.log(i)//10个10 },1000) }

    for(var i=0;i<10;i++){ setTimeout(function(){ console.log(i)//10个10 },1000) } 遇到这种问题 如何用解决呢 for(v ...

  4. uni app以及小程序 --环境搭建以及编辑器

    https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 根据以上网页下载自己电脑相应的版本的微信开发者工具(目录 ...

  5. OSCP-FristiLeaks

    环境搭建 靶机下载: https://www.vulnhub.com/entry/fristileaks-13,133/ 安装:直接用virtualbox打开 网络桥接 找到靶机IP 虚拟机启动就显示 ...

  6. TCP/IP网络知识

    1.TCP/IP概念 TCP/IP不是单指一种传输协议,而是一组传输控制协议/互联网协议. 2.TCP/IP分层 (计算机网络中,实际应用的网络协议是TCP/IP协议族,TCP/IP的应用层大体上对应 ...

  7. 编辑docker容器中的文件

    一般docker中没有VI或者其它相应的文本编辑器,为了写个东西安装个vi就可以解决问题,除此之外还有别的办法 登陆docker中找到需要编辑的文件的位置 sudo docker ps -a sudo ...

  8. TCP坚持定时器

    窗口探查(window probe) 当接收方TCP缓冲区没有剩余空间后,在ACK中会通知发送方window=0,此时发送方就暂停发送数据.当接收方TCP缓冲区又有空间后,会再次发送一个ACK,告知其 ...

  9. 14、yum仓库搭建

    一.本地仓库 1.yum搭建本地仓库(单台如何实现) 1) 挂载cd光盘,因为里面很多的软件包 [root@www.oldboyedu.com ~]# mount /dev/cdrom /mnt 2) ...

  10. 迭代器遍历【List、Set、Map】

    迭代器遍历[List.Set.Map] example package boom.collection; import java.util.ArrayList; import java.util.Ha ...