Java非阻塞内存分配

标签 java jvm memory-management

我在某处读到,java 可以在大约 12 条机器指令中为对象分配内存。这给我留下了深刻的印象。据我了解,JVM 使用的技巧之一是按 block 预分配内存。这有助于最大限度地减少对操作系统的请求数量,我猜这是相当昂贵的。但即使是 CAS 操作,在现代处理器上也可能花费多达 150 个周期。

那么,谁能解释一下 java 中内存分配的实际成本以及 JVM 使用哪些技巧来加速分配?

最佳答案

JVM 为每个线程预分配一 block 内存区域(TLA 或 Thread Local Area)。 当一个线程需要分配内存时,它会在该区域内使用“Bump the pointer allocation”。 (如果“空闲指针”指向地址 10,而要分配的对象大小为 50,那么我们只需将空闲指针指向 60,并告诉线程它可以为该对象使用 10 到 59 之间的内存) .

关于Java非阻塞内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1176974/

相关文章:

java - 从 POJO 到 Record 的 jOOQ 映射器

java - 如何解决无法通过 ID 恢复实体的问题?

java - 了解 Java 垃圾收集中的足迹测量

java - 就内存管理而言,定义全局变量相对于局部变量的好处

java - 如何使 Integer 实例不可为空

java - Android在父类xml中声明textview并在子类中设置监听器

java - Android studio 创建jvm失败

Grails 应用程序占用更多内存?

c++ - std::deque 内存使用 - Visual C++,以及与其他人的比较

c++ - 使用构造函数 Vs 动态初始化对象。 C++ 中的新功能?