JVM系列:一、JVM内存分区及作用(JDK8)

本文深入解析JVM内存结构,涵盖线程共享与私有数据区域,包括Heap、方法区、虚拟机栈等关键概念,以及各区域的作用和管理。

一、JVM 内存分区及作用:

   根据《Java虚拟机规范》的规定,JVM 所管理的内存将会包括以下几个运行时数据区域如下,但不同的 JVM 版本在实现上有所差异。
在这里插入图片描述

下图为 JDK8 的内存结构:
在这里插入图片描述

各个数据区域可以继续细分如下结构:

  1. Heap
    • Young Generation
      • Eden
      • Survivor From
      • Survivor To
    • Old Generation
    • String Constant Pool
  2. 方法区-Meta Space
    • Runtime Constant Pool
      • Literal
      • Symbolic Reference
    • 类的元数据
  3. Direct Memory
  4. VM Stack
  5. Native Method Stack
  6. Program Counter Register

二、JVM - 线程共享数据区域

2.1 堆(Heap)

    Heap 是所有线程所共享的一块内存(Eden 中 TLAB(Thread Local Allocation Buffer) 是线程独享的),在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。

    Heap 内存可以通过 -Xms 、-Xmx 设置堆初始大小、最大值,对应下图中的 min 和 max。Heap 大小可以动态调整,当 committed 值超过高水位或低于低水位时,Heap 就会进行扩容或缩容,这样的话必然要进行一次 GC,所以,在 WEB 应用场景下,一般将 -Xms 、-Xmx 设置相等,避免在应用启动时,频繁的触发 GC。

在这里插入图片描述

TLAB(Thread Local Allocation Buffer)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值