Имеет ли значение JDK производителя, с которым вы строите? - PullRequest
12 голосов
/ 22 сентября 2008

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

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

Ответы [ 8 ]

8 голосов
/ 22 сентября 2008

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

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

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

4 голосов
/ 22 сентября 2008

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

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

3 голосов
/ 25 октября 2011

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

3 голосов
/ 22 сентября 2008

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

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

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

2 голосов
/ 22 сентября 2008

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

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

2 голосов
/ 22 сентября 2008

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

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

1 голос
/ 26 сентября 2008

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

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

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

0 голосов
/ 22 сентября 2008

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

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

Кроме того, вы можете создавать и развертывать с помощью ANT и использовать JDK от Sun с ANT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...