Java非阻塞内存分配

Den*_*nov 11 java jvm memory-management

我在某处读到java可以为大约12个机器指令中的对象分配内存.这对我来说非常令人印象深刻.据我所知,JVM使用的一个技巧是在块中预分配内存.这有助于最大限度地减少对操作系统的请求数量,这是非常昂贵的,我想.但即便是CAS操作也可能在现代处理器上花费多达150个周期.

那么,有没有人可以解释java中内存分配的实际成本以及JVM用于加速分配的技巧?

Tni*_*son 22

JVM为每个线程(TLA或线程局部区域)预分配一个内存区域.当一个线程需要分配内存时,它将在该区域内使用"Bump the pointer allocation".(如果"自由指针"指向地址10,并且要分配的对象大小为50,那么我们只是将空闲指针碰到60,并告诉线程它可以使用10到59之间的内存作为对象) .