DirectByteBuffer的绝大多数(如果足够大)是从Java Heap分配的。但是,即使它很小,它的一部分仍然会在堆上。

任何大小的DirectByteBuffer会占用多少字节?

最佳答案

显然,这是实现定义的,因为Java规范对此不作任何保证。对于现代的热点虚拟机:每个对象2个字的开销(确切地说,即使对象没有任何对象,变量也至少要1个字)。现在,您基本上必须数了。每个对象必须对齐8个字节。

作为示例,让我们看一下DirectByteBuffer:我们看到它存储了一个对象(1个字)。现在,如果它与其他对象共享此对象,则您可能会或可能不想将其计算在内。如果算上它,则必须找出要存储的对象并计算其大小(因此取决于您的确切代码路径)。由于DirectByteBuffer扩展了一个类,因此您必须为其添加大小。

是的,这是很多工作,我敢肯定,地狱不会为您完成;)但这很简单。我算了至少3个引用和29bytes原语。

09-15 22:56