我可以想到几种选择:
- 通过微基准测试(即jmh)找出您的方法需要多少内存。
- 基于启发式估计的建筑分配策略。有几种实现类大小估计的开源解决方案,即ClassSize。一种更简单的方法可能是利用释放很少使用的对象的缓存(例如Guava的缓存)。如@EnnoShioji所述,Guava的缓存具有基于内存的驱逐策略。
您也可以编写自己的基准测试来计算内存。这个想法是为了
- 运行一个线程。
- 创建一个新的数组来存储要分配的对象。因此,在GC运行期间不会收集这些对象。
System.gc()
,memoryBefore = runtime.totalMemory() - runtime.freeMemory()
- 分配您的对象。将它们放入数组。
System.gc()
,memoryAfter = runtime.totalMemory() - runtime.freeMemory()
这是我在轻量级微基准测试工具中使用的一种技术,该工具能够以字节精度测量内存分配。



