内存分配管理之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映射内存使用,直呼好家伙~



目录
相关文章
|
存储 Cloud Native Linux
C++ namespace对全局变量屏蔽的工程化意义解读
C++ namespace对全局变量屏蔽的工程化意义解读
|
3月前
|
存储 监控 Java
JVM 元空间(Metaspace)
JVM 元空间(Metaspace)
345 5
|
5月前
|
C++
C++一分钟之—名空间(namespace)的作用与使用
【6月更文挑战第22天】C++的命名空间是代码组织的关键,防止命名冲突并促进模块化。通过`namespace`定义代码块,如`MyNamespace{...}`,并使用别名(`namespace MN = MyNamespace::...`)简化引用。避免过度使用和嵌套,以及`using namespace`的滥用,而应在小范围内导入所需成员。明智选择名空间名称并有效利用`using`声明,能提升代码可读性和专业性。
126 1
|
XML 存储 监控
JVM记一次PermGen space内存溢出实战案例
JVM记一次PermGen space内存溢出实战案例
86 0
|
6月前
|
存储 前端开发 Java
深入解析JVM内存结构:Metaspace、堆与垃圾收集器
深入解析JVM内存结构:Metaspace、堆与垃圾收集器
|
安全 Java 程序员
38-Metaspace区域是如何因为类太多而发生内存溢出的?
永久代溢出,由于到了JDK8,已经完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Metaspace)来代替,因此后续我们不再说 方法区、永久代,直接使用Metspace元空间来称呼。
923 0
38-Metaspace区域是如何因为类太多而发生内存溢出的?
|
Java 流计算
taskmanager.memory.jvm-metaspace.size
taskmanager.memory.jvm-metaspace.size
332 2
|
Java
CiteSpace修改jvm emory大小,提高运行效率方法
CiteSpace修改jvm emory大小,提高运行效率方法
243 0
CiteSpace修改jvm emory大小,提高运行效率方法
C++那些事儿 —— 名字空间(三分钟带你了解using namespace std到底是个啥?)
C++那些事儿 —— 名字空间(三分钟带你了解using namespace std到底是个啥?)
312 0
|
Oracle Java 关系型数据库
JVM源码分析之Metaspace解密
JVM源码分析之Metaspace解密