Java运行时数据区域分为:程序计数器,虚拟机栈,本地方法栈,Java堆,方法区,运行时常量池,直接内存,结构如下:

  1.程序计数器:

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

  由于Java虚拟机的多线程是通过线程轮流切换并分配cpu的处理时间的方式来实现的,所以在任意时刻,一个cpu都只会执行一个线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各个线程之间的程序计数器不会互相影响,独立存储,我们称这类内存区域为“线程私有“的内存。

  如果线程执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是Native方法,这个计数器的值为空(Undefined)。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemory情况的区域。

  2.Java虚拟机栈:与程序计数器一样,Java虚拟机栈也是线程私有的,生命周期与线程一致。虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出入口信息等,一个方法从调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

  局部变量表存储了编译器可预知的各种基本数据类型(int,byte,char,short,int,float,long,double),对象引用(refrence类型,不等同于对象本身,指向对象起始地址的引用指针)和returnAddress类型(指向了一条字节码指令的地址)。

  这个区域所需要的内存大小是在编译器就确定的,在Java虚拟机规范中,对这个区域规定了两种异常:一是如果线程请求的栈深度大于虚拟机所允许的深度,将跑出StackOverFlowError异常。二是虚拟机栈动态扩展时如果无法申请到足够的内存,就会抛出OutOfMemoryError异常。

  3.本地方法栈:与虚拟机栈发挥的作用相似,区别不过是虚拟机栈为虚拟机执行Java方法提供服务,而本地方法栈则为虚拟机执行Native方法服务。

  4.Java堆:Java堆是Java虚拟机所管理的最大的一部分内存,堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,它唯一的目的就是存放对象实例,几乎素有的对象实例都在这里分配内存。

  堆是垃圾回收器(GC)主要管理的区域,堆可以划分为新年代和老年代,再细致一点有Eden空间,fromSurvivor空间,toSurvivor空间等。进一步的细分是为了在不同的空间针对其特征上采用不同的回收算法,更快的释放内存。堆可以物理上不连续,但是逻辑上连续,也是按照可扩展规范来实现的(通过-Xmx,-Xms来控制),当堆中没有内存能够完成内存分配并且堆已经不能再扩展时,就会抛出OutOfMemoryError异常。

  5.方法区:与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,与堆内必须执行大多数情况下可以将这部分区域理解为“永久代”,在该区域执行的回收一般是针对类的卸载和常量池的垃圾回收,当方法区无法满足内存分配的需求时,将会抛出OutOfMemoryError。

  6.运行时常量池:是方法区的一部分。

  7.直接内存:并不是虚拟机运行时数据的一部分,也不是Java规定的虚拟机规范中内存的范围内,在JDK1.4中引入了NIO(new I/O)类,可以使用native函数库直接分配堆外内存,当各个区域内存总和大于本机总内存且需要动态扩展时,会跑出OutOfMemoryError。

深入理解JVM(一) -- 自动内存管理机制的更多相关文章

  1. JVM介绍&自动内存管理机制

    1.介绍JVM(Java Virtual Machine,Java虚拟机) JVM是Java Virtual Machine的缩写,通常成为java虚拟机,作为Java可以进行一次编写,到处执行(Wr ...

  2. 深入理解JAVA虚拟机 自动内存管理机制

    运行时数据区域 其中右侧三个一起的部分是每个线程一份,左侧两个是所有线程共享的. 程序计数器(Program Counter Register) 英文名称叫Program Counter Regist ...

  3. JVM自动内存管理机制——Java内存区域(上)

    一.JVM运行时数据区域概述 Java相比较于C/C++的一个特点就是,在虚拟机自动内存管理机制的帮助下,我们不需要为每一个操作都写像C/C++一样的delete/free代码,所以也不容易出现内存泄 ...

  4. JVM自动内存管理机制--读这篇就GO了

    之前看过JVM的相关知识,当时没有留下任何学习成果物,有些遗憾.这次重新复习了下,并通过博客来做下笔记(只能记录一部分,因为写博客真的很花时间),也给其他同行一些知识分享. Java自动内存管理机制包 ...

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

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

  6. JVM自动内存管理机制——Java内存区域(下)

    一.虚拟机参数配置 在上一篇<Java自动内存管理机制——Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a) ...

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

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

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

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

  9. [深入理解Java虚拟机]<自动内存管理>

    Overview 走近Java:介绍Java发展史 第二部分:自动内存管理机制 程序员把内存控制的权利交给了Java虚拟机,从而可以在编码时享受自动内存管理.但另一方面一旦出现内存泄漏和溢出等问题,就 ...

随机推荐

  1. Java Spring 使用 Redis

    在 Java 中使用 Redis 需要使用 Jedis.jar github 页面 https://github.com/xetorthio/jedis javadocs http://xetorth ...

  2. 作业——11 分布式并行计算MapReduce

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapRedu ...

  3. Linux安装问题解决

    首先安装VM,之后下载centos7.5 安装好vm后运行时无法执行操作 提示 已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 此主机支持 Intel VT-x,但 I ...

  4. .NET Core Startup启动类

    .NET Framework 早期架构 在.NET Core面世之前,也就是.NET Framework时代,我们的软件架架构有一些比较通用的架构.抛开我们的业务组件,在我们的系统中我们总会有一些基础 ...

  5. 三层架构BLL+DAL+Model & MVC & MVVM

    三层架构 - 国内版 Binghttps://cn.bing.com/search?FORM=U227DF&PC=U227&q=%E4%B8%89%E5%B1%82%E6%9E%B6% ...

  6. MySql分区后创建索引加速单表查询和连表查询

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/konkon2012/article/de ...

  7. Linux下查找命令 —— find、grep、 which、 whereis、 locate

    find命令 基本格式 find < path > < expression > < cmd > ''' path: 所要搜索的目录及其所有子目录.默认为当前目录. ...

  8. vue mpvue 上拉加载更多示例代码

    vue 上拉加载更多示例代码 可以比较简单的改为 mpvue , 去除滚动判断,直接放在 onReachBottom 周期即可. html <div id="app"> ...

  9. [LeetCode] 317. Shortest Distance from All Buildings 建筑物的最短距离

    You want to build a house on an empty land which reaches all buildings in the shortest amount of dis ...

  10. 机器学习技法总结(一):支持向量机(linear support vector machine,dual support vector machine)

    第一阶段技法: large margin (the relationship between large marin and regularization), hard-SVM,soft-SVM,du ...