标签 Java编程 下的文章

JVM 里 new 对象时,堆会发生抢占吗?JVM 是怎么设计来保证线程安全的?当多个线程同时进行对象的内存分配时,可能会出现指针抢占的问题。假设在JVM虚拟机上,每次进行对象分配时,指针会向右移动一个对象大小的距离。当一个线程正在为对象A分配内存时,指针尚未更新。同时,另一个线程也需要为对象B分配内存,并使用了同一个指针进行分配,这就发生了抢占现象。

- 阅读剩余部分 -

什么是指针碰撞?什么是空闲列表?内存分配可以采用两种方式:指针碰撞(Bump The Pointer)和空闲列表(Free List)。指针碰撞方式假设Java堆中的内存是绝对规整的,已使用的内存和空闲的内存分别放置在堆的两端,两者之间通过一个指针作为分界点的指示器进行区分。在这种情况下,内存分配仅需要将指针向空闲空间的方向移动一段与对象大小相等的距离,从而完成内存的分配,因此称为"指针碰撞"。

- 阅读剩余部分 -