我到底需要多少内存(part 1)
原文: http://plumbr.eu/blog/how-much-memory-what-is-retained-heap 我将需要多少内存?当你构建一个解决方案,创建一个数据结构或者选择一个算法时这个问题你可能问过自己或者别人.请问这个图是否适合在我的3G堆上,它包含1,000,000条边并且我使用HashMap存储它?我可以使用标准的集合API来构建我的自定义缓存解决方案或者他们带来的开销太大? 显然,回答这个简单的问题有点复杂.在这篇文章中我们将一窥全豹看这个坑到底有多深. 回答标题中的问题来自于几个部分.首先我们需要了解你是否对shallow heap和retained head的大小有兴趣. shallow heap比较容易 - 它仅仅是自己本身所占有的堆内存.如果计算它有一些细微差别,但是不在本文的范围内.敬请期待未来相同主题的文章. retained heap有许多计算方式更有趣.你不会对shallow heap感兴趣,在大多数情况下你的问题又可以说成"如果从内存中移除这个对象,通过垃圾回收会有多少内存被释放". 现在,我们都还记得,所有的Java垃圾回收算法都是以下的逻辑: 1. 有一些对象被GC认为是"重要的".被叫做GC root并且几乎不会被回收.比如,当前运行方法的本地变量和输入参数,程序线程,来自本地代码的引用和类似于"全局"的对象. 2. 任何从GC