2010-04-07 7 views
4

Состояние release notes for Java NIO (в Java 1.4+) означает, что поддержка прямых байтовых буферов является дополнительной функцией. Мне любопытно, какие производители/ароматы JVM не поддерживают его? Должна ли библиотека JNI всегда кодировать управляемые ByteBuffers и относить прямые ByteBuffers как оптимизацию?Какие JVM не поддерживают прямой java.nio.ByteBuffer?

Благодаря

ответ

2

Я не знаю, какие JVMs реализации/не осуществлять прямые ByteBuffers. Но в некотором смысле это не особенно актуально ... потому что всегда возможно, что у какого-то поставщика появится новая JVM, которая меняет уравнение, поддерживая/не поддерживая прямые ByteBuffers.

Должна ли библиотека JNI всегда кодировать управляемые ByteBuffers и относить прямые ByteBuffers как оптимизацию?

Это зависит от ваших целей.

  • Если ваша цель - максимальная переносимость, то ваш код JNI не должен предполагать, что доступны прямые ByteBuffers.

  • Если ваша цель - максимальная производительность, тогда ваш код может предполагать, что прямые байтовые буферы всегда будут доступны (и сломаются, если это не так). Кроме того, у вас могут быть две разные библиотеки JNI (или условно скомпилированные варианты одной и той же библиотеки), которые Java-сторона выбирает между ними во время выполнения в зависимости от поддержки платформы для прямых ByteBuffers.

Но это все кажется немного отключенным от реальности. Спустившись по маршруту JNI, вы неявно принимаете путь непереносимости. Вам уже приходится иметь дело с родными библиотеками, которые (по крайней мере) должны быть перекомпилированы для разных JVM и разных целевых платформ. И я бы подумал, что тестирование на всех поддерживаемых платформах имеет важное значение.

Таким образом, не ожидайте значительных сокращений для многоплатформенной поддержки вашего кода JNI.