Может ли виртуальная машина когда-либо перемещать
буфер до его окончательного освобождения?
Он не будет перемещен, потому что прямой буфер не является частью кучи GC.
Если я создаю новый буфер в нативном
код с использованием NewDirectByteBuffer, чей
ответственность состоит в том, чтобы освободить
резервная память?
Это ваша (нативный код) ответственность за его освобождение. JVM не может знать, какой метод использовался для выделения этого резервного хранилища (может быть malloc'd, может быть статическим буфером и т. Д.)
Что произойдет, если я создам новый буфер
в нативном коде, используя
NewDirectByteBuffer и адрес
уже используется прямым буфером?
Если виртуальная машина не будет пытаться освободить память, адрес которой передан в NewDirectByteBuffer, ничего не произойдет, если вы передадите один и тот же адрес дважды.