Подтвердить что ты не робот

Имеет ли значение, с каким поставщиком JDK вы строите?

Если я развертываю серверы с помощью WebSphere 6.1 (Java 1.5), должен ли я использовать IBM JDK в моей сборке? Или Sun JDK скомпилируется в один и тот же двоичный файл?

Если я должен использовать IBM, где я могу получить версию Windows x64?

4b9b3361

Ответ 1

Я постараюсь как можно лучше поддерживать развитие как можно ближе к производству. Ibm и Sun JDK, безусловно, удовлетворяют сертификацию SDK, но они ни в коем случае не идентичны. Их аппаратура и управление памятью, по крайней мере, немного отличаются. Если ничего другого, ошибки в JDK будут разными, и ваш код может только переходить в один сценарий по сравнению с другим. Вероятно, это произойдет и в 4 часа ночи, и когда луна будет заполнена, особенно когда у вас будет компания.

Я не могу сказать вам, где взять IBM jdk, но если у вас есть лицензия на websphere в вашей компании, у вас должен быть контакт в IBM, чтобы вы получили ссылку на этот JDK.

Удачи и всегда старайтесь минимизировать различия там, где это возможно.

Ответ 2

Это не должно иметь никакого значения. Вероятно, это не будет точно такой же двоичный, но 100% совместимый. Я предполагаю, что вы используете внешние библиотеки так или иначе, как log4j или, возможно, спящий режим или что-то еще, и они не построены с использованием IBM JDK.

Однако существуют различия в JRE. Например, я помню, что когда я перечислил методы или поля класса с использованием отражения, IBM JRE использовала их для меня в другом порядке, чем у Sun.

Ответ 3

Я бы использовал тот же JDK для сборки, который будет использоваться, когда приложение будет развернуто (если у вас есть контроль над этим).

Бинарные файлы могут отличаться, если компилятор отличается, но они должны быть семантически идентичными. Я не знаю, написал ли IBM собственный компилятор. JRockit JDK фактически использует компилятор Sun, но JVM разные. Таким образом, с JRockit двоичные файлы идентичны.

Если приложение используется с разными JDK во время выполнения, я все равно буду строить с тем, который, по вашему мнению, будет использоваться во время развертывания большую часть времени и выполнить некоторое тестирование во время выполнения с разными JDK.

Ответ 4

IBM JDK поставляется с J9 VM и SUN JDK работает на Hotspot VM, которые имеют разные алгоритмы для работы. Приложение может не работать одинаково, если вы развертываете и настраиваете SUN JDK, и ваше производство использует IBM JDK для WAS. Проконсультируйтесь с поставщиками и откройте билет, сообщите нам, как это происходит.

Ответ 5

Компиляция с любым JDK не должна вызывать проблемы, если вы не ссылаетесь на классы за пределами java. * и javax. * pacakges (которых вы не должны быть). Конечно, всегда есть вероятность, что существует расхождение между данным поставщиком JDK и спецификации, которые могут вызвать некоторые действительно странные ошибки времени выполнения, которые трудно отследить, но я никогда не видел этого раньше в своем опыте.

Я бы рекомендовал запускать любые тестовые пакеты, которые у вас есть, с использованием целевой JRE, поскольку поведение во время выполнения отличается между поставщиками гораздо чаще, чем семантика компиляции.

Ответ 6

JDKs компилируют ваш код в байт-код, а не непосредственно в машинный код. Предполагается, что компиляторы разных поставщиков генерируют код, совместимый с несколькими поставщиками. Например, компилятор IBM для JDK1.5 создает код, который работает на SUN JDK 1.5 и более поздних версиях без каких-либо проблем.

Другая проблема заключается в том, как компиляторы оптимизируют байт-код, у меня нет информации о том, что некоторые компиляторы выполняют лучшую оптимизацию, чем другие. Наибольшая часть оптимизации выполняется во время выполнения JVM (например, стратегии JIT (точно в срок) или AOT (впереди)).

Ответ 7

Работая с WebSphere, долгое время версия JDK очень важна. WebSphere 6.1 поставляется с IBM JDK 1.5 (или это 5). Когда вы исправляете WebSphere, для JDK есть эквивалентные патчи. Хотя он может работать с другой версией JDK (даже с другим поставщиком), я сомневаюсь, что вы получите большую поддержку от IBM, если что-то пойдет не так.

Если вам нужна 64-разрядная JVM, я бы предположил, что, возможно, есть 64-битная сборка, в то время как я не могу комментировать окна, я могу сказать, что есть 64-битная сборка WebSphere 6.1 для AIX и Linux.

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

Ответ 8

Они должны скомпилировать одну и ту же спецификацию байт-кода, хотя они могут скомпилировать другой байт-код (так же, как и другие компиляторы C генерируют разный машинный код). Я не думаю, что при запуске результирующего кода возникнут какие-либо проблемы - я скомпилировал Java 1.4 на Mac, а затем развернул его на IBM J9, работающем на PocketPC, без проблем (это было до того, как J9 мог обрабатывать байт-код Java 5).

Независимо от того, я определенно сделаю вашу платформу компиляции маркером в вашем файле readme, чтобы ваш клиент мог увидеть, если это проблема.

В качестве альтернативы вы можете создавать и развертывать с помощью ANT и использовать Sun JDK с ANT.