绝大多数DirectByteBuffer - 如果足够大 - 都是从Java堆中分配出来的。但是它的一部分仍然在堆上,即使它非常小。
任何大小的DirectByteBuffer在堆上占用多少字节?
答案 0 :(得分:2)
这显然是实现定义的,因为Java规范不对这些东西做任何保证。对于现代热点虚拟机:每个对象2个字开销(即使对象没有任何变量,对于变量至少要有1个字)。现在你基本上要数了。每个对象必须是8字节对齐。
作为示例,让我们看看DirectByteBuffer:我们看到它存储了一个对象(1个单词)。现在,如果它与其他东西共享此对象,您可能会或可能不想计算它。如果算上它,你必须找出存储的对象并计算它的大小(因此取决于你的确切代码路径)。由于DirectByteBuffer扩展了一个类,因此您必须添加该大小。
是的,这是相当多的工作,我肯定不会为你做这件事;)但这很简单。我算上至少3个引用和29byte原语..
答案 1 :(得分:0)
极少数。足够的监视器,类引用,标记,位置,限制和容量,以及对直接数据阵列的引用。
如果数据阵列足够小,你不得不担心开销,也许根本就不应该使用。