JVM运行时数据区(下篇)

这篇具有很好参考价值的文章主要介绍了JVM运行时数据区(下篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 紧接上篇:JVM运行时数据区(上篇)-CSDN博客 

  • 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。
  • 栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态变量就可以实现对象在线程之间共享。
  • 字符串常量池,存储字符串的常量。

JVM运行时数据区(下篇),jvm

  • 堆空间有三个需要关注的值,used total max。
  • used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。
  • 当total达到max时说明可分配内容已满,注意此时并不代表OOM!

JVM运行时数据区(下篇),jvm

方法区

方法区是Java虚拟机规范中提出来的一个虚拟机概念,在HotSpot不同版本中会用永久代或者元空间来实现。方法区主要存放的是基础信息,包含:

  • 每一个加载的类的元信息(基础信息)。
  • 运行时常量池,保存了字节码文件中的常量池内容,避免常量内容重复创建减少内存开销。
ps:jdk1.8

JVM运行时数据区(下篇),jvm

总结

JVM运行时数据区(下篇),jvm

ps:jdk8

运行时数据区指的是JVM所管理的内存区域,其中分成两大类: 文章来源地址https://www.toymoban.com/news/detail-796175.html

  • 线程共享 – 方法区、堆
    • 方法区:存放每一个加载的类的元信息、运行时常量池、字符串常量池。
    • 堆:存放创建出来的对象。
  • 线程不共享 – 本地方法栈、虚拟机栈、程序计数器
    • 本地方法栈和虚拟机栈都存放了线程中执行方法时需要使用的基础数据。
    • 程序计数器存放了当前线程执行的字节码指令在内存中的地址。
    • 直接内存主要是NIO使用,由操作系统直接管理,不属于JVM内存。

到了这里,关于JVM运行时数据区(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM - 运行时数据区域

    并发情况下,会发生线程之间的上下文切换,当 线程1 的CPU时间片用完后,需要程序计数器记录 线程1 的下一条JVM指令的地址,等下一次 线程1 继续运行的时,才能从正确的位置开始继续执行 程序计数器是线程私有的 , 既 一个线程计数器 记录一个 线程 的指令位置 而且程

    2024年02月15日
    浏览(34)
  • JVM运行时数据区(上篇)

    JVM运行时数据区可分为线程共享的堆,方法区和线程独享的虚拟机栈、本地方法栈、程序计时器此外还有一个单独的直接内存,如下图所述: 程序计数器(Program Counter Register)也叫PC寄存器,每个线程会通过程序计数器记录当前要执行的的字节码指令的地址。 起始时计数器记

    2024年01月17日
    浏览(50)
  • JVM系列 运行时数据区

    第一章 运行区实验 JVM(Java虚拟机)运行区是Java程序在运行过程中被JVM所管理的内存区域。它包括了Java程序运行时的堆(Heap)、栈(Stack)、方法区(Method Area)、本地方法栈(Native Method Stacks)、程序计数器和直接内存(Direct Memory)等部分。 堆(Heap)是Java程序运行时用于

    2024年02月08日
    浏览(41)
  • JVM运行时五大数据区域详解

            java虚拟机再执行Java程序的时候把它所拥有的内存区域划分了若干个数据区域。这些区域有着不同的功能,各司其职。这些区域不但功能不同,创建、销毁时间也不同。有些区域为线程私有,如:每个线程都有自己的程序计数器,则程序计数器随着用户线程创建而创

    2024年02月13日
    浏览(45)
  • JVM内存模型/运行时数据区域

    java虚拟机管理这块内存,所以我们也叫运行时数据区域 这里按线程是否共享来分类,所谓线程不共享就是每个线程里面都会配一套 程序计数器 栈, 互相不干涉。 而方法区和堆是线程所有共享 意味着只有一个(这里注意堆是实际概念 方法区是一个虚拟概念) 注意:程序计

    2024年01月18日
    浏览(55)
  • 二、JVM-深入运行时数据区

    计算机体系结构 JVM的设计实际上遵循了遵循冯诺依曼计算机结构 CPU与内存交互图: 硬件一致性协议: MSI、MESI、MOSI、Synapse、Firely、DragonProtocol 摩尔定律 摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的晶体

    2024年02月14日
    浏览(38)
  • 说一下 JVM 运行时数据区 ?

    目录 一、程序计数器(Program Counter Register) 二、Java 虚拟机栈(Java Virtual Machine Stacks) 三、本地方法栈(Native Method Stack) 四、Java 堆(Java Heap) 五、方法区(Methed Area) 当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条

    2024年02月21日
    浏览(35)
  • JVM运行时数据区——本地方法栈

    1.本地方法栈 本地方法栈里面存放的是 调用 的本地(Native)的方法,例如hashcode()。 本地方法栈也是线程 私有 的,本地方法是由 C 语言实现的。 如果 线程请求的栈容量 大于 本地方法栈允许的最大容量 则会出现 栈溢出 的问题。 其内存空间可以调整。

    2024年02月16日
    浏览(40)
  • JVM—内存管理(运行时数据区)、垃圾回收

    当JVM类加载器加载完字节码文件之后,会交给执行引擎执行,在执行的过程中会有一块JVM内存区域来存放程序运行过程中的数据,也就是我们图中放的运行时数据区,那这一块运行时数据区究竟帮我们做了哪些工作?我们常说的线上内存泄漏和内存溢出是因为什么?我们今儿

    2024年02月13日
    浏览(41)
  • JVM运行时数据区之堆空间

    一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。堆区在 JVM 启动的时候即被创建 ,其空间大小也就确定了,是 JVM管理的最大一块内存空间 。 《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。(The heap is the run-time dat

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包