内存分配管理之Largeobjectspace

简介: 内存分配管理之Largeobjectspace

什么是Largeobjectspace

该空间是专门针对所谓需要大内存对象的内存分配器

判定规则

1.如果分配一个对象的内存超出了某个值就会吧这个对象放到这块空间中,可以理解为针对大对象的分配单独创建了一个largeobjectspace空间进行分配内存。

2.对象的数据类型是有限制的:必须是基础类型的数组,或者是string类对象。

不同于其他分配算法。这个largeobjectspace的分配内存的方式是进行直接mmap映射一块操作系统的内存进行分配内存。一个对象对应的就是一块mmap的内存

其他分配算法

1。bumpspace通过指针碰撞来分配内存,由于他是一块内存连续的空间,所以进行这种分配算法效率最高,每次分配时维护一下当前该分配到哪块内存即可。这种常用于线程本地分配tlab使用。

这种回收内存会造成碎片化,因为内存分配是连续的但是回收的时候没有进行额外处理而是直接将那块内存回收掉,所以碎片化非常严重。

2。regonspace把内存分为一块regon,分配时按照regon进行分配。一块一块的regon,内存回收时是按照拷贝算法,回收时进行拷贝活着的对象,死亡对象进行清除。

3。后面art虚拟机采用了更复杂的内存分配算法和回收算法,也就是degleeote和allotec

分配内存更加严格,slot代表内存分配基本单位,run是进行内存分配时用到的,可以理解为是管理slot内存的。

对run进行操作run内部在根据空闲的slot空间进行分配内存。

当run内部对slot没有空闲的时候,会进行加锁分配内存保证安全。

第四种就是Largeobjectspace了,针对大对象的分配。直接从操作系统mmap映射内存使用,直呼好家伙~



目录
相关文章
|
7月前
|
Java Linux
8 种 Java- 内存溢出六 -Out of swap space?
8 种 Java- 内存溢出六 -Out of swap space?
|
4月前
|
存储 监控 Java
JVM 元空间(Metaspace)
JVM 元空间(Metaspace)
450 5
|
6月前
|
C++
C++一分钟之—名空间(namespace)的作用与使用
【6月更文挑战第22天】C++的命名空间是代码组织的关键,防止命名冲突并促进模块化。通过`namespace`定义代码块,如`MyNamespace{...}`,并使用别名(`namespace MN = MyNamespace::...`)简化引用。避免过度使用和嵌套,以及`using namespace`的滥用,而应在小范围内导入所需成员。明智选择名空间名称并有效利用`using`声明,能提升代码可读性和专业性。
167 1
|
7月前
|
Dragonfly 算法 安全
RT-Thread快速入门-动态内存堆管理方法
RT-Thread快速入门-动态内存堆管理方法
110 0
|
7月前
|
存储 前端开发 Java
深入解析JVM内存结构:Metaspace、堆与垃圾收集器
深入解析JVM内存结构:Metaspace、堆与垃圾收集器
|
编译器 Linux C语言
使用new/delete动态管理内存【C/C++内存分布】
使用new/delete动态管理内存【C/C++内存分布】
58 0
|
安全 Java 程序员
38-Metaspace区域是如何因为类太多而发生内存溢出的?
永久代溢出,由于到了JDK8,已经完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Metaspace)来代替,因此后续我们不再说 方法区、永久代,直接使用Metspace元空间来称呼。
989 0
38-Metaspace区域是如何因为类太多而发生内存溢出的?
|
存储 缓存 算法
JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
765 0
|
Java
CiteSpace修改jvm emory大小,提高运行效率方法
CiteSpace修改jvm emory大小,提高运行效率方法
260 0
CiteSpace修改jvm emory大小,提高运行效率方法
C++那些事儿 —— 名字空间(三分钟带你了解using namespace std到底是个啥?)
C++那些事儿 —— 名字空间(三分钟带你了解using namespace std到底是个啥?)
323 0