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



目录
相关文章
|
8月前
|
XML 存储 监控
JVM记一次PermGen space内存溢出实战案例
JVM记一次PermGen space内存溢出实战案例
57 0
|
4月前
|
Dragonfly 算法 安全
RT-Thread快速入门-动态内存堆管理方法
RT-Thread快速入门-动态内存堆管理方法
31 0
|
4月前
|
安全 IDE Java
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
163 0
|
5月前
|
存储 前端开发 Java
深入解析JVM内存结构:Metaspace、堆与垃圾收集器
深入解析JVM内存结构:Metaspace、堆与垃圾收集器
|
10月前
|
安全 Java 程序员
38-Metaspace区域是如何因为类太多而发生内存溢出的?
永久代溢出,由于到了JDK8,已经完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Metaspace)来代替,因此后续我们不再说 方法区、永久代,直接使用Metspace元空间来称呼。
489 0
38-Metaspace区域是如何因为类太多而发生内存溢出的?
|
11月前
|
Java 流计算
taskmanager.memory.jvm-metaspace.size
taskmanager.memory.jvm-metaspace.size
210 2
|
11月前
|
存储 缓存 算法
JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
JVM虚拟机:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
432 0
C++那些事儿 —— 名字空间(三分钟带你了解using namespace std到底是个啥?)
C++那些事儿 —— 名字空间(三分钟带你了解using namespace std到底是个啥?)
211 0
|
Java
CiteSpace修改jvm emory大小,提高运行效率方法
CiteSpace修改jvm emory大小,提高运行效率方法
188 0
CiteSpace修改jvm emory大小,提高运行效率方法
|
Oracle Java 关系型数据库
JVM源码分析之Metaspace解密
JVM源码分析之Metaspace解密