2015-02-17 2 views
1

Я получил UnsupportedOperationException в следующем коде:Почему получить UnsupportedOperationException на ByteBuffer.allocateDirect (10) .array()

byte[] temp = ByteBuffer.allocateDirect(10).array(); 

Я проверил java specification, он говорит:

UnsupportedOperationException - Если этот буфер не подкрепляется доступным массивом

Вот мои вопросы:

(1) Это означает, что если byteBuffer создается через ByteBuffer.allocateDirect, этот byteBuffer всегда не поддерживается доступным массивом?

(2) Я знаю, что этот byteBuffer выделяется вне кучи Java, но какова реализация этого распределения. Может быть, через системный вызов системы? Итак, доступен ли массив, зависит от используемой ОС?

+1

Из документов для 'allocateDirect':« Независимо от того, имеется ли массив подкачки, он не указан ». Так что да, это все зависит от реализации ... –

ответ

1

Ну, что касается части (1), нет, буфер не должен быть подкреплен массивом Java - и не создается таким образом.

Что касается (2), фактическая реализация будет зависеть от базовой операционной системы, так как реализация использует вызовы собственной ОС для фактического реализации массива. В Linux вы ожидаете, что он использует вызов ядра malloc() для резервирования некоторой памяти, которая затем считывается/записывается напрямую с использованием дополнительных внутренних вызовов; другие системы, очевидно, имели бы свои собственные эквиваленты, и JVM назвала бы их.

Смежные вопросы