侧边栏壁纸
博主头像
晓果冻博主等级

一个热爱生活的95后精神小伙

  • 累计撰写 103 篇文章
  • 累计创建 14 个标签
  • 累计收到 45 条评论

JVM运行时数据区-堆

晓果冻
2020-04-22 / 0 评论 / 1 点赞 / 196 阅读 / 445 字
温馨提示:
本文最后更新于 2021-10-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

JVM运行时数据区-堆

核心概念:
  • 可以处于物理上不连续的内存空间,只需逻辑上连续即可。
  • 一个JVM进程中堆是唯一的,一个进程有多个线程,所以堆是可以被一个JVM进程中的多个线程共享,也就是说堆是线程不安全的。
    • 也就是堆内存是被线程共享的,但其中一小块区域TLAB(私有缓存区)是线程私有的,我在后面详细学习哈。
  • 在JVM启动的时候被创建,其大小也就被确定了。
    • 可以通过**-Xmx和-Xms**来控制其最大内存和最小内存
    • 如果堆中内存没有完成实例分配且堆无法再继续扩展,则会抛出OutOfMemory的异常(OOM)。image-20210428221841447
  • 对象实例、数组都在对上完成分配
    • 不是全部对象,有一部分对象会发生逃逸,很深很深的概念,画圈圈后期深入学习。逃逸分析
  • GC垃圾回收重点关照区域。
  • 堆的构成:
    • JDK1.8之前新生代-老年代-永久区
    • JDK1.8之后新生代-老年代-元空间
      • 新生代又分为:Eden区和Survivor区
        • Survivor区分为:Survivor From和Survivor TO(或者s0、s1)

程序计数器

虚拟机栈

本地方法栈

0

评论区