我在某处读到,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/