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