JVM精进之路

JVM相关问题一网打尽
帅旋
关注
充电
帅旋DevShow:专注软件开发 · Mac 数码 · 摄影分享

JVM内分配有什么策略?

发布于 2024-08-30 | 更新于 2024-10-13

内存分配的方式有“指针碰撞”(Bump the Pointer)和空闲列表法。

  • 指针碰撞法:默认使用指针碰撞法,在这种内存分配策略中,Java堆内存被视为一个绝对规整的连续空间,其中维护一个称为“分配指针”的指示器。分配指针的一边是已经被分配的内存,另一边是尚未使用的内存。当一个新的对象需要分配内存时,JVM仅仅将这个分配指针向未使用内存的方向移动一个与新对象大小相等的距离。
  • 空闲列表法:在空闲列表法中,JVM维护一个列表来跟踪堆中的空闲内存块。这些内存块是由于对象被垃圾收集器回收而产生的,因此它们的大小和位置可以不连续。
    • 当有新对象需要内存分配时,JVM遍历空闲列表,寻找第一个满足所需大小的空闲块。这个搜索过程可以基于不同的策略,如首次适应(first-fit)、最佳适应(best-fit)、最差适应(worst-fit)等。

对比

  • 效率问题:与指针碰撞法相比,空闲列表法在内存分配时可能会更耗时,因为需要遍历和搜索列表来找到合适的空闲块。
  • 碎片化管理:空闲列表法可以更有效地应对内存碎片化问题,通过利用不连续的空闲内存块,减少了因碎片化导致的内存浪费。

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/faqs/jvm/memory-management/jvm-memory-allocation-strategy.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。

请帅旋喝一杯咖啡

咖啡=电量,给帅旋充杯咖啡,他会满电写代码!

IT宅

关注公众号及时获取网站内容更新。