我有一个存储压缩数据的自定义集合。
如何轻松获取集合的KB或MB大小?
我想知道我的数据存储效率如何,以及压缩对某些数据的影响。
答案 0 :(得分:0)
也许最简单的方法是计算在您的集合中添加或删除项目时消耗的内存量(对象大小),那时您现在可能已经放入集合中的压缩对象的大小,只需将其添加到目前的规模。我认为这是一种替代方法,只需在每次需要时计算整个尺寸。
要了解单个对象的大小,您可以使用:http://www.javapractices.com/topic/TopicAction.do?Id=83
该技术基本上在创建对象之前和创建对象之后获取内存,使用:Runtime.getRuntime()。totalMemory()
还有其他技术。
答案 1 :(得分:-1)
快速而肮脏的答案是:
public static void main(final String[] args) {
System.out.println("Before: " + getUsedMem());
final byte[] bb = new byte[30 * 1024 * 1024]; // 30 MB
System.out.println("After: " + getUsedMem());
}
private static String getUsedMem() {
final long mem = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
return (mem / 1024) + "KB";
}
但是,请记住,由于其垃圾收集器,多线程架构等,这些数字将不准确。 特别是如果你随之运行GUI。 如果您坚持使用一个非常简单的程序而没有静态初始化程序且垃圾收集器没有机会启动,那么您可能会非常精确地使用它。