jdk8以前



jdk8以后



内存分出的数据区域:程序计数器Java 虚拟机栈本地方法栈方法区运行时常量池字符串常量池

栈:

局部变量表:存放方法参数和方法内定义的局部变量,包括基本数据类型(byte、short、int、long、float、double、char、boolean )以及对象引用。例如在一个方法中定义 int num = 10; ,这个 num 就存储在局部变量表中。

操作数栈 :方法执行过程中,用于存储操作数和运算结果。比如进行 int a = 1 + 2; 运算时,1 和 2 先压入操作数栈,运算后结果 3 也在操作数栈中暂存。

动态链接:Java 虚拟机栈中每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的符号引用,用于支持方法调用过程中的动态链接。

方法返回地址:当方法执行完成后,需要返回调用它的地方,这个地址就存储在此处。

存储内容:是 Java 虚拟机管理的最大一块内存区域,几乎所有的对象实例和数组都在堆上分配内存。例如使用 new 关键字创建对象,如 Object obj = new Object(); ,这个新创建的 Object 实例就存放在堆中。堆也是垃圾回收器主要管理的区域,会根据对象的存活情况进行垃圾回收,释放不再使用的内存空间。

方法区

类信息:包括类的全限定名、父类信息、接口信息、字段信息、方法信息等。比如定义一个 class Person ,这个类的相关结构信息就存储在方法区。

常量:如静态常量,像 public static final int MAX_VALUE = 100; 中的 MAX_VALUE 就存放在方法区。

静态变量 :类中定义的静态变量,如 public static int count = 0; ,count 存储在方法区。

即时编译器编译后的代码:Java 虚拟机的即时编译器(JIT)会将一些热点代码编译成机器码,编译后的代码存放在方法区。 此外,运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。

请简述 Java 的内存模型,以及栈、堆、方法区分别存储什么内容?的更多相关文章

  1. jvm内存模型中-栈,方法区,程序计数器是线程安全的

    文章转自  https://www.cnblogs.com/myna/p/7567889.html 引文 JDK7及之前版本的方法区(Method Area)和Java堆一样,是各个线程共享的内存区域 ...

  2. Java虚拟机内存模型及垃圾回收监控调优

    Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...

  3. java内存管理(堆、栈、方法区)

    java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...

  4. 深入理解Java虚拟机内存模型

    前言 本文中部分内容引用至<深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>第12章,如果有兴趣可自行深入阅读,文末放有书籍PDF版本连接. 一.物理机中的并发 物理机遇到的并 ...

  5. Java的内存模型

    "让计算机并发执行若干个运算任务"与"更充分地利用计算机处理器的效能"之间的因果关系,看起来顺理成章,实际上它们之间的关系并没有想象中的那么简单,其中一个重要的 ...

  6. Java多线程内存模型

    Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果.在此之前 ...

  7. Java虚拟机--内存模型与线程

    Java虚拟机--内存模型与线程 高速缓存:处理器要与内存交互,如读取.存储运算结果,而计算机的存储设备和处理器的运算速度差异巨大,所以加入一层读写速度和处理器接近的高速缓存来作为内存和处理器之间的缓 ...

  8. JVM 运行时数据区:程序计数器、Java 虚拟机栈和本地方法栈,方法区、堆以及直接内存

    Java 虚拟机可以看作一台抽象的计算机,如同真实的计算机,它也有自己的指令集和运行时内存区域. Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存(运行时内存区域)划分为若干个不同的数 ...

  9. Java对象内存模型

    2 Java对象内存模型 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 在 JVM ...

  10. 全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

随机推荐

  1. X-MACRO使用技巧

    背景 最近遇到一个问题,需要将分区表硬编码在代码,第一反应可能是定义个数组,数组内容包括分区名称和分区大小. 类似于这种: struct Partition { const char *name; i ...

  2. python基础—初识函数(一)

    1.python中函数定义 函数是逻辑结构化和过程结构化的一种编程方法. (1).python中函数定义方法: def test(x): '''The function definitions''' ...

  3. 【Zookeeper从入门到实战】SpringBoot整合完整指南

    Zookeeper从入门到实战:SpringBoot整合完整指南 一.Zookeeper概述 1.1 什么是Zookeeper Zookeeper是一个开源的分布式协调服务,由Apache软件基金会维 ...

  4. 纯js的购物车案例

    1 <style> 2 table { 3 text-align: center; 4 } 5 img { 6 height: 25px; 7 width: 22px; 8 } 9 < ...

  5. OceanBase向量检索在货拉拉的探索和实践

    作者:陈铨,货拉拉大数据技术与产品部高级大数据工程师 首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 #数据库.#AI.#技术架 ...

  6. 在浏览器中清除缓存和 Cookies

    清除浏览器缓存和 Cookie 的说明 大多数浏览器中按 Ctrl+Shift+Delete 键打开菜单以清除缓存和 Cookie.如果此步骤不起作用,请在下面选择浏览器类型了解详细说明. Inter ...

  7. 用java的眼光看js的oop

    前言 都知道javascript的class只是语法糖而已,所以没法去对比,不在一个层次. 但是既然有了,总会有好奇的去对比. 那就对比一下. 面向对象的三个经典特性 封装 继承 多态 封装 指的是将 ...

  8. Rust修仙之道 第十六章:文源境 · 字符符咒与灵文操控之法 (第一季完结篇)

    第十六章:文源境 · 字符符咒与灵文操控之法 "术可传者,以文为媒:术可验者,以符为印." 顾行云开启"文源宫",面对来自仙盟术士的最终考验: 「请解析百行灵符 ...

  9. PLY 模型文件简析

    PLY 模型文件简析 参考链接 wiki需要FFFQQQ TIPS 主要是一些英文的简析,但是一句话,网上讲的不清楚,特此说明 property list uchar int vertex_indic ...

  10. POLIR-Organization-大计(15、10、5年计划)-教材-如何分辨一本好书-十(二/三/四)五规划-引进版(原版/影印/编译版)-自研版:等级(得奖/国家级/省/地)+分级(研究生/本科/大中专/职业院校)

    POLIR-Organization-大计(15.10.5年计划)-教材-十(二/三/四)五规划-等级(得奖/国家级/省/地)+分级(研究生/本科/大中专/职业院校) References: 北京大学 ...