问题如下:
程序员在程序开始时分配大量连续内存,在必要时处理它。这与每次需要内存时简单地进入操作系统形成对比。这样做会更快,因为它可以避免不断向操作系统请求连续内存块的成本。
JVM这样做可以维护它自己的内存部分,然后从中分配对象。
问题是如何实际执行这个步骤?
大多数C和C++编译器已经提供了堆内存管理器作为标准库的一部分,因此您根本不需要做任何事情来避免每次请求都访问操作系统。
如果你想要提高性能,你可以简单地连接和断开周围的大量可以改进的分配器。
如果你想编写自己的堆管理器作为学习练习,下面是它需要做的基本工作:
在程序开始时,你已经分配了足够大的内存块,以满足其需求。然后,你必须重新加载new和/或malloc、DELETE和/或free,以便从/或向此缓冲区返回内存。
在实现这种解决方案时,需要编写自己的分配器(从块源),并且可能最终使用多个分配器,这通常是首先分配内存池的原因。
默认内存分配器是一个很好的全局分配程序,但并不是所有分配需求的最佳选择。例如,如果知道将为特定大小分配大量对象,则可以定义一个分配程序,它分配固定大小的缓冲区,并预先分配多个对象以获得一定的效率。