预分配(例如)100KB内存(在堆中)是否更好,但是只继续使用60KB,或者更好地根据需要分配每个字节?
我的问题来自阅读此博客: http://deplinenoise.wordpress.com/2012/10/20/toollibrary-memory-management-youre-doing-it-wrong/
答案 0 :(得分:1)
这实际上取决于应用程序的复杂内存细节。然而,这个人的基本点是绝对准确的 - 预分配和内存区域是非常有效的。 new
和delete
是最常用的工具,如果您有更具体的问题,可以找到更有效的解决方案。固定大小的对象池是另一个例子。
答案 1 :(得分:0)
是的。在某些情况下,操作系统实际上并没有为您提供所有空间。以Linux为例。 Java倾向于请求大量内存并且从不使用它,所以实际发生的是操作系统保留了您请求的这些范围的轨道,但从未将它们映射到页面表中(因此永远不会为它分配帧),直到您使用它为止。因此,就虚拟内存而言,您似乎已经使用了很多但实际上您只使用了您访问过的页面(您实际使用的示例中的40kb)。你可以在内存的虚拟和物理使用之间看到这一点(假设你的进程没有交换)。