一、JVM体系结构

二、JVM内存模型

根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:

1、堆(Heap)

堆的作用是存放对象实例和数组。从结构上来分,可以分为新生代和老年代。而新生代又可以分为Eden 空间、From Survivor 空间(s0)、To Survivor 空间(s1)。 所有新生成的对象首先都是放在新生代的。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来的对象,和从前一个Survivor复制过来的对象,而复制到老年代的只有从第一个Survivor区过来的对象。而且,Survivor区总有一个是空的。

2、虚拟机栈(Virtual Machine Stack)

虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

3、本地方法栈(Native Method Stacks)

本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地方法服务。

4、方法区(Method Area)

方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把 方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区 分开来。

说到方法区,不得不提一下“永久代”这个概念,尤其是在JDK 8以前,许多Java程序员都习惯在 HotSpot虚拟机上开发、部署程序,很多人都更愿意把方法区称呼为“永久代”(Permanent Generation),或将两者混为一谈。本质上这两者并不是等价的,因为仅仅是当时的HotSpot虚拟机设计团队选择把收集器的分代设计扩展至方法区,或者说使用永久代来实现方法区而已,这样使得 HotSpot的垃圾收集器能够像管理Java堆一样管理这部分内存,省去专门为方法区编写内存管理代码的工作。但是对于其他虚拟机实现,譬如BEA JRockit、IBM J9等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一。但现在回头来看,当年使用永久代来实现方法区的决定并不是一个好主意,这种设计导致了Java应用更容易遇到内存溢出的问题(永久代有-XX:MaxPermSize的上限,即使不设置也有默认大小,而J9和JRockit只要 没有触碰到进程可用内存的上限,例如32位系统中的4GB限制,就不会出问题),而且有极少数方法 (例如String::intern())会因永久代的原因而导致不同虚拟机下有不同的表现。当Oracle收购BEA获得了 JRockit的所有权后,准备把JRockit中的优秀功能,譬如Java Mission Control管理工具,移植到HotSpot 虚拟机时,但因为两者对方法区实现的差异而面临诸多困难。考虑到HotSpot未来的发展,在JDK 6的 时候HotSpot开发团队就有放弃永久代,逐步改为采用本地内存(Native Memory)来实现方法区的计 划了[1],到了JDK 7的HotSpot,已经把原本放在永久代的字符串常量池、静态变量等移出,而到了 JDK 8,终于完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Metaspace)来代替,把JDK 7中永久代还剩余的内容(主要是类型信息)全部移到元空间中。

5、程序计数器(Program Counter Register)

程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器 的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处 理、线程恢复等基础功能都需要依赖这个计数器来完成。

三、参考

《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版》周志明著

深入理解JVM—JVM内存模型相关推荐

  1. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理

    java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...

  2. java中的vm自变量_java中JVM虚拟机内存模型详细说明

    java中JVM虚拟机内存模型详细说明 JVM的内部结构如下图: 一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求 ...

  3. JVM 的内存模型及对象的内存布局(一图尽收眼底)

    JVM 的内存模型 Java 数据类型对象的内存布局 2.1 Example layout of a java.lang.Integer object for a 32-bit Java proces ...

  4. JVM 的内存模型及jstat命令的使用

    目录 JVM的内存模型 jdk1.7的内存模型 jdk1.8的内存模型 为什么要废弃1.7中的永久代? 通过jstat命令查看堆内存使用情况 查看class加载统计 查看编译统计 垃圾回收统计 JVM ...

  5. 无法装载这个对象_面试官:别的我不管,这个JVM虚拟机内存模型你必须知道

    前言 说jvm的内存模型前先了解一下物理计算机的内存处理. 物理计算器上用户磁盘和cpu的交互,由于cpu读写速度速度远远大于磁盘的读写速度速度,所以有了内存(高速缓存区).但是随着cpu的发展,内存 ...

  6. modeler java堆空间,JVM|02内存模型

    JVM内存模型 概述 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保 ...

  7. JVM——Java内存模型(JMM)

    关注微信公众号:CodingTechWork,一起学习进步. 软硬件发展概述 Amdahl定律和摩尔定律 1)Amdahl定律:通过系统中并行化和串行化的比重来描述多处理器系统能获得的运算加速能力. ...

  8. Java内存结构(JVM)与内存模型(JMM)

    JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...

  9. java-22:JVM基本原理 - 内存模型

    本文来自几篇文章的组合,会标注引用的地址.作为初学者,看到有些单一文章并没有讲得很清晰明了,辅助几篇文章才完全理解.这里整理一下. 第一篇文章:内存模型. 第一部分:概述 参考:JVM原理最全.清晰. ...

  10. jvm优化——内存模型

    这篇主要来介绍jvm中的内存模型 一.jvm 内存模型划分 根据JVM规范,JVM 内存共分为:方法区,虚拟机栈,本地方法栈,堆,程序计数器五个部分 方法区(线程共享) 被所有方法线程共享的一块内存区 ...

最新文章

  1. Django视图之介绍、项目准备、URL、路由命名、reverse反解析和Postman测试
  2. R语言ggplot2可视化自定义图例实战:添加自定义的图例、添加填充色的图例
  3. buffer sort Oracle,[转]BUFFER SORT是BUFFER却不是SORT
  4. SQL Server 为什么事务日志自动增长会降低你的性能
  5. java 利用dfs生成简单的随机迷宫(效率不高)
  6. 简单的多目标遗传算法实现
  7. OnInit 和 Page_Init 事件有什么不同
  8. OJ4121 and OJ2968-股票买卖 and Maximun sum【各种dp之6 and 9】
  9. EMR Spark Runtime Filter性能优化
  10. wince 开发_大牛总结: 入行嵌入式开发之前,先来看看这个规划
  11. 计算机中常用的三种码制,码制
  12. SpringSecurity系列之基于数据库认证
  13. connected papers 白嫖攻略
  14. Android入门,android开发需要什么基础
  15. Smarty - 官方网站
  16. qemu网络配置-桥接-IOT固件模拟
  17. html5自动播放mov格式视频
  18. 吴晓波眼中的2018年
  19. 如何从 Trados双语文件 中获得 原文 的方法
  20. 机器学习--主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?

热门文章

  1. 华三无线控制器基础调试步骤
  2. 【毕业设计】18-基于单片机的数字直流电源设计(源代码工程+仿真工程+答辩论文+答辩PPT)
  3. SPSS描述统计分析【003期】
  4. 养颜有妙--招-喝水可祛痘、退烧、养胃、助眠
  5. 容联云完成内部调查:重新符合纽交所上市要求 仍未递交年报
  6. 信息通信行业政企业务主要发展方向探索
  7. 图片放大不失真的方法,图无损放大
  8. JLink_Windows_V612e安装 02
  9. 【Quicker】您的指尖工具箱
  10. 七十七、Kettle的简介与安装部署