Что Вы не можете сделать на VM Дальвика (VM Android), что Вы можете в Sun VM?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

56
задан Iamat8 17 December 2015 в 09:11
поделиться

2 ответа

Существует много вещей, что Дальвик не обработает или не обработает вполне тот же путь как стандартный Байт-код Java, хотя большинство из них вполне совершенствуется.

самым серьезным примером является поколение байт-кода во время выполнения и пользовательская загрузка класса. Скажем, требуется создать некоторый байт-код и затем использовать classloader для загрузки его для Вас, если тот прием будет работать над Вашей нормальной машиной, это, как гарантируют, не будет работать над Дальвиком, если Вы не измените свое поколение байт-кода.

, Который препятствует тому, чтобы Вы использовали определенные платформы внедрения зависимости, самый известный пример, являющийся Google Guice (хотя я уверен, некоторые люди работают над этим). С другой стороны, AspectJ должен работать, поскольку он использует инструментарий байт-кода в качестве шага компиляции (хотя я не знаю если любой, которого судят).

относительно других jvm языков - что-либо, что в конце компилирует в стандартный байт-код и не использует инструментарий байт-кода во времени выполнения, может быть преобразовано в Дальвик и должно работать. Я знаю, что люди действительно выполняли Jython на Android, и это работало хорошо.

Другая вещь знать состоит в том, что существует не как раз вовремя компиляция . Это не строго проблема Dalviks (можно всегда компилировать любой байт-код на лету, если Вы желаете), но тот Android не поддерживает это и вряд ли сделает так. В эффекте, в то время как микросравнительное тестирование для стандартного Java было бесполезно - компоненты имели различное время выполнения characterstics в тестах, чем, поскольку части больших систем - микросравнивают для телефонов на базе Android, полностью имеют смысл.

34
ответ дан Marcin 26 November 2019 в 17:32
поделиться

Если вы видите « Внутренние компоненты виртуальной машины Dalvik » сеанс ввода-вывода Google, вы можете обнаружить, что Dalvik не поддерживает сборщик мусора поколений .

Таким образом, это может снизить производительность частого создания и удаления объектов. Java VM поддерживает сборку мусора поколений, поэтому в той же ситуации она покажет лучшую производительность сборщика мусора.

Кроме того, Dalvik использует JIT с зернистостью трассировки вместо JIT с гранулированием метода.

12
ответ дан 26 November 2019 в 17:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: