网站开发问卷调查,厦门网站建设找维品,网络管理app,265上网导航写此篇博客源于面试问到内存分配的细节#xff0c;然后不明白问的是什么。回过头发现以前看过这块内容#xff0c;只是有些印象#xff0c;但是无法描述清楚。
额外概念了解
jvm内存空间是逻辑上连续的虚拟地址空间#xff08;虚拟内存中的概念#xff09;映射到物理内存…写此篇博客源于面试问到内存分配的细节然后不明白问的是什么。回过头发现以前看过这块内容只是有些印象但是无法描述清楚。
额外概念了解
jvm内存空间是逻辑上连续的虚拟地址空间虚拟内存中的概念映射到物理内存不一定连续物理内存不足时还会将物理内存中的数据交换到swap(磁盘的一块区域)。这块水有点深查阅资料做了个个人的总结。
内存划分有指针碰撞和空闲列表这两种划分方式
1、指针碰撞
当内存区域规整排列也就是说已用内存放在一边空闲内存放在一边中间用指针作为分界点在给新的对象分配内存时可以将指针向空闲端移动对象大小的距离。碰撞是由于指多线程访问时因内存共享会存在内存冲突指针碰撞的情况当然可以使用CAS和TLAB两种方式解决
2、空闲列表
当内存区域不规整排列已用内存和空闲内存交错此时无法通过指针碰撞划分内存jvm通过维护一个空闲列表用来记录空闲内存区间新对象内存分配时找到一块足够大的内存空间去分配并更新空闲列表。
3、那么指针碰撞和空闲列表的使用时机是什么或者说什么时候内存区域规整或者不规整呢
不同GC垃圾回收器有不同垃圾回收算法对于标记-整理算法内存区域是规整的。而标记-清除算法内存区域是不规整的。因此也验证了为何标记清除算法会产生内存碎片的问题。