我想记录一个对象占用一个项目的内存量(以字节为单位)(我正在比较数据结构的大小),并且似乎没有方法可以在Java中完成。据说C / C ++有sizeOf()
方法,但这在Java中不存在。我尝试Runtime.getRuntime().freeMemory()
在创建对象之前和之后记录JVM中的可用内存,然后记录差异,但是无论结构中元素的数量如何,它只会给出0或131304,并且两者之间什么都没有。请帮助!
你可以使用该java.lang.instrumentation
软件包:
http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html
它具有一种方法,可用于获取特定于实现的对象大小的近似值以及与对象相关的开销。
Sergey链接的答案有一个很好的例子,我将在这里重新发布,但是你应该已经从他的评论中进行了研究:
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
使用getObjectSize:
public class C {
private int x;
private int y;
public static void main(String [] args) {
System.out.println(ObjectSizeFetcher.getObjectSize(new C()));
}
}
用数组和for循环 有溪流 一般来说,我知道ArrayList有开销,这可能导致数组的最小大小在看到增益之前。此外,如果有更好的方法来执行流操作或迭代。不确定forEach在这种情况下是否有效,因为它是一个终端操作,我需要按照array/arrayList的原始顺序捕获结果。
问题内容: 如果设置最大Java堆大小,那么单个对象可能的最大大小是多少? 假设我的应用程序只有一个类,而我正在创建一个对象。 该对象有大约大小限制吗? 我的课看起来像下面的课: 注意 正如我提到的JVM堆大小一样,我要求定量地回答。 问题答案: 理论上最大的Java对象(如果您有足够大的堆)将是带有2 31-1个元素的Java对象。那是16Gb。 但是,对于给定的堆大小,您将能够创建的最大对象取
问题内容: 以下代码创建了多少个String对象? 我访问过许多网站,有人说这行代码创建了3个对象,有人说它创建了4个对象。我只是想知道执行这行代码后创建了多少个对象。 问题答案: 到运行结束时,将有四个对象: 一个对应于实习字面 其副本由创建 一个对应于实习字面 一个对应于级联 真正的问题是 将 部分或全部这些对象 归因 于您的程序。可以合理地说,您的代码最多可以创建两个或四个。尽管总共有四个对
问题内容: 我有一个包含用户数据的类,如下所示: 我需要计算非字段,以显示用户已填充的配置文件的百分比。还有一些,我不希望在百分比计算要考虑几个字段:,和。 一种简单的方法是使用多个语句来获取非null字段,但这将涉及大量样板代码,并且还有一个我需要显示完成百分比的类。因此,我创建了一个实用程序函数,如下所示: 然后我按如下所示调用此函数: 我的问题是,这是我不算数字段还是可以进一步改进的最佳方法
以上是我通过json得到的,我需要将值分配给UITableView: 它返回0行,我是ios新手请帮助我如何将这些值分配给uitableview。 当做
问题内容: 众所周知,java使用以下数据类型 如果我创建一个像 现在的问题是大小尺寸是。请以适当的理由给我澄清。 谢谢, Anil Kumar C 问题答案: 对象的内存大小取决于体系结构,主要取决于VM是32位还是64位。实际的VM实施也很重要。 对于每个对象,您需要为其对象标头(在64位VM上通常为2 * 8字节),其字段(根据VM的实现需要额外的对齐空间)的空间。然后将最后的空间四舍五入到