一道java题关于ByteBuffer.allocate()和ByteBuffer.allocateDirect

来源:百度知道 编辑:UC知道 时间:2024/05/20 02:45:39
证明ByteBuffer.allocate()和ByteBuffer.allocateDirect在性能上的差异
写出代码,望高人指点

allocateDirect
public static ByteBuffer allocateDirect(int capacity)分配新的直接字节缓冲区。
新缓冲区的位置将为零,其界限将为其容量,其标记是不确定的。无论它是否具有底层实现数组,其标记都是不确定的。
参数:
capacity - 新缓冲区的容量,以字节为单位

allocate
public static ByteBuffer allocate(int capacity)分配一个新的字节缓冲区。
新缓冲区的位置将为零,其界限将为其容量,其标记是不确定的。它将具有一个底层实现数组,且其 数组偏移量将为零。
参数:
capacity - 新缓冲区的容量,以字节为单位

allocate和allocateDirect方法都做了相同的工作,不同的是allocateDirect方法直接使用操作系统来分配Buffer。因而它将提供更快的访问速度。不幸的是,并非所有的虚拟机都支持这种直接分配的方法。
Sun推荐将以字节为单位的直接型缓冲区allocateDirect用于与大型文件相关并具有较长生命周期的缓冲区。