- public static ByteBuffer allocate(int capacity)
- public static ByteBuffer allocateDirect(int capacity)
為什么要提供兩種方式呢?這與Java的內存使用機制有關。第一種分配方式產生的內存開銷是在JVM中的,而另外一種的分配方式產生的開銷在JVM之外,以就是系統級的內存分配。當Java程序接收到外部傳來的數據時,首先是被系統內存所獲取,然后在由系統內存復制復制到JVM內存中供Java程序使用。所以在另外一種分配方式中,能夠省去復制這一步操作,效率上會有所提高。可是系統級內存的分配比起JVM內存的分配要耗時得多,所以並非不論什么時候allocateDirect的操作效率都是最高的。以下是一個不同容量情況下兩種分配方式的操作時間對照:

由圖能夠看出,當操作數據量非常小時,兩種分配方式操作使用時間基本是同樣的,第一種方式有時可能會更快,可是當數據量非常大時,另外一種方式會遠遠大於第一種的分配方式。