Java虚拟机所管理的内存图:

1程序计数器:

该模块作用是记录线程执行字节码的位置,记录程序执行状态,以便该线程下次获得CPU时继续执行。程序里的每个线程程序计数器相互独立,互不影响,该内存区也称“线程私有”内存。

2、java虚拟机栈:

与程序计数器一样,java虚拟机栈也是“线程私有”,’每个方法执行的时候进入虚拟机栈,会创建一个栈帧,用于存储局部变量表,操作栈,动态链接,方法出口等信息,每一个方法从调用到执行完成,对应着每一个栈帧在虚拟机栈中从入栈到出栈的过程。

其中局部变量表包括java基本数据类型以及对象引用类型(reference)、returnAddress类型,该区域在代码编译时即确定占用内存大小,不会在执行方法中改变。

在虚拟机规范中,该区会产生两种异常,一种是线程请求的栈深度大于虚拟机所允许的深度会抛出StackOverFlowError 异常;当虚拟机动态拓展java虚拟机栈没有足够的内存时,会产生OutOfMemoryError异常

3、本地方法栈

本地方法栈跟java虚拟机栈类似,不过java虚拟机栈是为java方法(java字节码)服务,本地方法栈是为Native方法服务,本地方法栈也会抛出StackOverFlowError以及OutOfMemoryError异常。

4、Java堆

Java堆是java虚拟机占用内存最大一块,所有对象共享该内存区。该区域存放对象,所有实例对象以及数组都在该区域分配内存进行实例化(随着JTI编译器的发展与逃逸分析技术的成熟,该说法不再绝对)

Java堆是垃圾回收的主要区域,该区域实例化时可用是连续的内存区域或者分开的区域,只要逻辑上是连续的即可,如果该区域实例化的时候分配不到内存或成熟OutOfMemoryError异常。

5、方法区

方法区和java堆一样都是共享区域,用于存储虚拟机已经加载的类信息、常量、静态变量以及即时编译器编译的代码数据,虽然java虚拟机规范描述该区为java堆的逻辑部分,但是该区有一个别名“非堆”,应该区分为方法区。

6、运行常量池

运行时常量池是方法区的一部分。Class文件中除了有版本、字段、方法、描述等信息,还有一项常量池,用于存储编译期生成的各种字面量和符号引用。

7、直接内存

JVM 虚拟机 内存说明的更多相关文章

  1. 设置TOMCAT的JVM虚拟机内存大小

    你知道如何设置TOMCAT的JVM虚拟机内存大小吗,这里和大家分享一下,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...

  2. JVM 虚拟机内存深入探究

    [<深入理解java虚拟机>-整理笔记] by  lijun JVM虚拟机内存逻辑模型: 方法区(全局变量 静态数据 常量等) 线程共享 堆栈区(对象实例 数组数据 new generat ...

  3. java中JVM虚拟机内存模型详细说明

    java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03|  分类: JAVA |  标签:java  jvm  堆内存  虚拟机  |举报|字号 订阅     JVM的内部结构 ...

  4. jvm 虚拟机内存模型

    来源:https://blog.csdn.net/A_zhenzhen/article/details/77917991?locationNum=8&fps=1    https://blog ...

  5. JVM虚拟机 - 内存

    在JVM虚拟机中,内存部分大致可以分为以下几类: Heap:堆 NonHeap:非堆 CodeCache:缓存编辑后的机器码的内存区域 CompressedClassSpace:类压缩空间 MetaS ...

  6. 面试官:别的我不管,这个JVM虚拟机内存模型你必须知道

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

  7. JVM虚拟机内存模型以及GC机制

    JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...

  8. JVM虚拟机内存溢出垃圾收集及类加载机制总结

    1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...

  9. 对jvm虚拟机 内存溢出的思考

    java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间

随机推荐

  1. 给定时器settimeout、setInterval调用传递参数

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在 许多场合必须要带参数,这就需要想方法解决.例如对于函数hello(_na ...

  2. 2016 icpc-ec-final

    一不小心惨变旅游队,不过上海的风景不错 顺带找其他队交流一下集训经验...或许可以成为选拔和集训16级的依据 A.直接模3就可以了,2^(3*n)%7=1 L.每场比赛3种情况,穷举就可以了 D.刚开 ...

  3. Spring MVC上传文件

    Spring MVC上传文件 1.Web.xml中加入 <servlet> <servlet-name>springmvc</servlet-name> <s ...

  4. Java selenium web页面的滚动条操作

    摘录自:http://blog.csdn.net/iceryan/article/details/8162703 //移动到元素element对象的"顶端"与当前窗口的" ...

  5. WPF内置命令

    <Window x:Class="WpfCommands.MainWindow"         xmlns="http://schemas.microsoft.c ...

  6. Linux常用命令及shell脚本

    一.     用户管理(添加用户.切换用户.删除用户) ~                                                                        ...

  7. 使用扫描二维码打开app

    应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...

  8. zookeeper 故障重连机制

    一.连接多个服务器,用逗号隔开 如果在连接时候zk服务器宕机 To create a client session the application code must provide a connec ...

  9. JPA,EclipseLink 缓存机制学习(一) 树节点搜索问题引发的思考

    最近在项目在使用JPA+EclipseLink 的方式进行开发,其中EclipseLink使用版本为2.5.1.遇到一些缓存方面使用不当造成的问题,从本篇开始逐步学习EclipseLink的缓存机制. ...

  10. Comparator

    1.java.util.Comparator 一个实现了comparator接口的对象能够对比不同的对象.它不能用于同一个类的不同实例的对比,但是可以用于其他的类的实例做对比.必须实现java.uti ...