jdk1.8之前  ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

jdk1.8之后↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

线程私有的:

  • 程序计数器
  • 虚拟机栈
  • 本地方法栈

线程共享的:

  • 方法区
  • 直接内存(非运行时数据区的一部分)

程序计数器

  1. 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
  2. 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。

Java 虚拟机栈

描述的是 Java 方法执行的内存模型,每次方法调用的数据都是通过栈传递的。实际上,Java虚拟机栈是由一个个栈帧组成,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息。局部变量表主要存放了编译器可知的各种数据类型(boolean、byte、char、short、int、float、long、double)、对象引用.

本地方法栈

本地方法被执行的时候,在本地方法栈也会创建一个栈帧,用于存放该本地方法的局部变量表、操作数栈、动态链接、出口信息。

此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。

Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以Java堆还可以细分为:新生代和老年代:再细致一点有:Eden空间、From Survivor、To Survivor空间等。进一步划分的目的是更好地回收内存,或者更快地分配内存。

方法区

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

运行时常量池

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

JDK1.7及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

java虚拟机内存空间相关推荐

  1. 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )

    文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...

  2. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...

  3. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  4. java 虚拟机_浅谈Java虚拟机内存区

    1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...

  5. JAVA环境指定xms512_【JAVA学习】java虚拟机内存配置,-Xss256m -Xms512m -Xmx800m -XX:MaxPermSize=512m...

    转自:https://blog.csdn.net/a503921892/article/details/39048737 配置tomcat服务器内存大小中的Xms.Xmx.PermSize.MaxPe ...

  6. 携程面试官问我怎么划分 Java 虚拟机内存区域,相见恨晚!

    看完记得一键三连哦,微信搜索[沉默王二]关注这个沉默但有点东西的小丑. 今天的标题绝非标题党,看下面这幅截图就明白了,读者真真的留言~ 在谈 JVM 内存区域划分之前,我们先来看一下 Java 程序的 ...

  7. Java 虚拟机内存模型

    一.前言 Java 虚拟机,简称 JVM(Java Virtual Machine),是 Java 语言中最为核心的一个东西,Java 程序运行离不开它,因为它的存在,使得 Java 拥有" ...

  8. Java 虚拟机内存分配机制

    Java 虚拟机内存分配机制 内存区域划分 对于大多数的程序员来说,Java 内存比较流行的说法便是堆和栈,这其实是非常粗略的一种划分,这种划分的"堆"对应内存模型的 Java 堆 ...

  9. java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案

    java虚拟机内存不足,"Could not create the Java Virtual Machine"问题解决方案 参考文章: (1)java虚拟机内存不足,"C ...

最新文章

  1. AspNetPager7.2的基本使用
  2. 在lips追加拣配数量
  3. 让Python pip下载速度加速
  4. 发布一个WTL实现的QQ2009登录窗口源码
  5. SpringMVC 返回json的两种方式
  6. Hystrix面试 - 深入 Hystrix 断路器执行原理
  7. ICCV2021 Oral-新任务!新数据集!康奈尔大学提出了类似VG但又不是VG的PVG任务
  8. kafka发送消息至指定分区
  9. Python 之父 Guido van Rossum 宣布
  10. NO Scala sdk module
  11. cups 2.4.1编译办法
  12. sd卡写保护解除工具_手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)...
  13. 软考历程(4)——安全问题之病毒
  14. java收费站开发流程,TLQ安装说明
  15. swift声明属性为某个类型同时遵循某协议
  16. 个人总结-公司业务逻辑如何进行梳理?
  17. 经验正交分解EOF的Matlab的实现示例
  18. Win键无法使用,被锁定
  19. ucr计算机专业排名,UC加州大学各分校哪些专业特别牛?
  20. 计算机网络 第四章 答案(更正版)(谢希仁 第七版)

热门文章

  1. 容器网络|深入理解Cilium
  2. 后端不哭!最新优化性能经验分享来啦
  3. 武汉疫情之后,中国即将发生的10大变化!(强烈推荐)
  4. 用Android Studio开发Java App (Runnable Jar)
  5. Linux线程(四)
  6. 使用VoiceFliter-Lite改进设备上的语音识别
  7. 5G时代探索互动立体视频信息承载的新可能
  8. 通过改进视频质量评估提升编码效率
  9. AV1挑起的Codec之战
  10. 腾讯云首次公开边缘计算网络开源平台,拥抱5G与万物互联