03. JVM 内存分配策略

文章目录

  • 前言
  • 一、Minor GC 与 Full GC
  • 二、JVM 内存分配策略
      • 1. 对象优先在 Eden 分配
      • 2.


前言

Java 技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:

  • 给对象分配内存;
  • 回收分配给对象的内存。

关于回收内存的部分我们已经在 GC 基础知识 中介绍了虚拟机中的垃圾回收体系以及运作原理,这一节我们主要讲解 Java 虚拟机的内存分配策略。

对象的内存分配,往大方向上讲,就是在堆上分配(但也可能经过 JIT 编译后被拆散为标量类型并间接地在栈上分配),对象主要分配在新生代的 Eden 区上,如果启动了本地线程分配缓冲(TLAB,Thread Local Allocation Buffer),将按线程优先在 TLAB 上分配。少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。


一、Minor GC 与 Full GC

  • 新生代 GC(Minor GC/Young GC): 是指发生在新生代的 GC。新生代对象存活的时间很短,因此 Minor GC 会频繁执行,执行的速度也比较快。
  • 老年代 GC(Major GC/Full GC): 是指整个堆内存的一次回收。

二、JVM 内存分配策略

1. 对象优先在 Eden 分配

大多数情况下,对象在新生代 Eden 区中分配。当 Eden 区没有足够空间进行分配的时候,虚拟机将发起一次 Minor GC*。

2.

你可能感兴趣的:(Java学习笔记——JVM,jvm,java,内存管理)