当前位置: 首页 > news >正文

jvm对象内存划分

写此篇博客源于面试问到内存分配的细节,然后不明白问的是什么。回过头发现以前看过这块内容,只是有些印象,但是无法描述清楚。

额外概念了解

jvm内存空间是逻辑上连续的虚拟地址空间(虚拟内存中的概念)映射到物理内存(不一定连续),物理内存不足时还会将物理内存中的数据交换到swap(磁盘的一块区域)。这块水有点深,查阅资料做了个个人的总结。

内存划分,有指针碰撞空闲列表这两种划分方式:

1、指针碰撞

当内存区域规整排列,也就是说已用内存放在一边,空闲内存放在一边,中间用指针作为分界点,在给新的对象分配内存时,可以将指针向空闲端移动对象大小的距离。碰撞是由于指多线程访问时,因内存共享,会存在内存冲突(指针碰撞)的情况,当然可以使用CAS和TLAB两种方式解决

2、空闲列表

当内存区域不规整排列,已用内存和空闲内存交错,此时无法通过指针碰撞划分内存,jvm通过维护一个空闲列表,用来记录空闲内存区间,新对象内存分配时,找到一块足够大的内存空间去分配,并更新空闲列表。

3、那么指针碰撞和空闲列表的使用时机是什么,或者说什么时候内存区域规整或者不规整呢?

不同GC垃圾回收器有不同垃圾回收算法,对于标记-整理算法,内存区域是规整的。而标记-清除算法,内存区域是不规整的。因此也验证了为何标记清除算法会产生内存碎片的问题。

http://www.lryc.cn/news/211016.html

相关文章:

  • 网络原理之TCP/IP
  • Docker:数据卷挂载
  • 你会处理 go 中的 nil 吗
  • 高级深入--day42
  • mysql 计算两个坐标距离
  • String、StringBuffer、StringBuilder和StringJoiner
  • 【数据结构】插入排序
  • Photoshop使用笔记总目录
  • 最近面试遇到的高频面试题
  • 负载均衡有哪些算法,分别在nginx中如何配置?
  • Starknet开发工具
  • Unity地面交互效果——1、局部UV采样和混合轨迹
  • 基于STM32的示波器信号发生器设计
  • 案例分析大汇总
  • MVCC(Multi-Version Concurrency Control,多版本并发控制)
  • 嵌入式面试2(c相关)
  • 基于SSM的n省出口基地公共信息服务平台设计与实现
  • opencv dnn模块 示例(20) 目标检测 object_detection 之 yolor
  • 【队列的顺序表示,链式表示】
  • Pydantic 实践
  • 获取pandas中的众数
  • SOLIDWORKS Simulation2024仿真10大新功能
  • Java程序设计2023-第二次上机练习
  • 如何在 uniapp 里面使用 pinia 数据持久化 (pinia-plugin-persistedstate)
  • 智慧矿山AI算法助力护帮板支护监测,提升安全与效率
  • shell中的运算
  • 【Java 进阶篇】解决Java Web应用中请求参数中文乱码问题
  • 51单片机-点阵屏led
  • Angular-03:组件模板
  • mysql 操作慢查询日志