2013-06-29 3 views
6

Я разрабатываю .NET-сайт, который будет размещаться на Parallel Plesk Panel (Windows), и у меня есть несколько классов, написанных на Java, с использованием его swing и API JavaMail, которые я хочу использовать на своем веб-сайте. У меня есть два варианта - jni4net и IKVM.net. Просто хотите знать, какой из них эффективный и удобный подход с точки зрения производительности и усилий для разработки?Java .NET Interoperability

+2

Не делайте этого. Перепишите свой материал Java в .NET, чтобы вы запускали на одной проверенной платформе. –

+0

Спасибо @ ThorbjørnRavnAndersen. Как вы оцениваете использование Web-сервисов в таком сценарии? –

+0

Если у вас есть Java-программа, которая разговаривает с вашим .NET backend _ONLY_, используя веб-службы, это было бы хорошо. Я понял из вашего вопроса, что вы хотите использовать код Java в своем приложении .NET. –

ответ

6

jni4net является путь более меньше (1.5MB бинарного размера), и лучше след - но развитие, вероятно, остановлены, и проект был заброшен, поскольку последнее хранилище обновление было выполнено в ноябре 2013, но он все еще держался на стадии Alpha, поэтому незрелый, сложный, нужно делать больше работы, чтобы использовать его, BTW, jni4net использовал LGPL, так что это будет очень проблематично, если вы захотите использование в ваших коммерческих продуктах.

IKVM.net, AFAIK, был почти общая реализация Java Runtime закодированы в CLR (поскольку он реализует OpenJDK, а не Orcale Java, так это о немного сломана) платформы, и сам бы JIT компилирует Java-байт-код в IL, а затем выполнить его, это похоже на QEMU, но есть еще одна проблема, что мы столкнулись с тремя слоями, первый уровень - Java Runtime, затем мы пришли к CLR и наконец собственный код, таким образом, это очень, очень медленно, и еще одна проблема - исходное время.

Например, я написал программу Java, которая будет печатать только знаменитую цитату «Hello World», а затем выйти, а затем я хотел бы проверить, сколько миллисекунд, что IKVM.net и Orcale JVM (сокращаются до JVM) (я запускаю обе платформы в среде окон KVM с 2 ядрами 3,4 ГГц процессора и 2 ГБ памяти DDR3), и мой результат: JVM был закончен в 692 мс при использовании памяти 9 МБ , а IKVM.net, может использовать около 4923 мс, с размером памяти 19 МБ, чтобы напечатать крутой «Hello World!». цитата только! Если я скомпилировал Java-класс в предварительно скомпилированный IL (ikvmc), смог бы сократить время до примерно 1907 мс, а использование памяти будет таким же, как у JIT.

Для сравнения, для виртуальной машины Java и ikvm.net (JIT), виртуальной машины Java имеет этилированный в течение примерно 7x раз во времени и 2х раз в памяти против соперника, так и для виртуальной машины Java и ikvm.net (предварительно скомпилированных), JVM все еще вел примерно в 2,7 раза и 1,11 раза в памяти против соперника, в то время как для IKVM.net (JIT) и IKVM.net (предварительно скомпилированный) он будет дает вам импульс удвоения времени и никаких различий в области памяти, хотя они все еще медленнее и толще, чем JVM.

Кроме того, есть еще одна проблема, которая прекомпилируются IKVM.net заглушки должны нести всю ikvm.net бинарного везде, и это было около 41MB прироста в размере пакета, то, я не знаю, если я может удалить некоторые неиспользуемые библиотеки, но в большинстве случаев мы этого не сделаем.

Для jni4net количество времени, затрачиваемого на печать «Hello World», составляет около 1567 мс, от CLR до JVM, и как насчет от JVM до CLR?Это странно, что он использовал 2106ms, я не знаю, почему разница огромна, возможно, это было потому, что Java создает экземпляр CLR с нуля динамически, а CLR может напрямую P/вызывать JNI в статически.

Подводя итог, jni4net, скорее всего, будет прокси между CLR и JVM - это не реализует полную среду Java, ни имитируя полную CLR, вместо этого он будет создавать как JVM и CLR экземпляра с помощью имеющихся ресурсов , В то время как IKVM.net, это больше похоже на JVM , закодированный в .Net, но вы можете вставлять Java-код в CLR, в то время как вы не можете кодировать .Net на стороне Java, он медленный, но он не требует JVM не более, вы можете просто установить .NET Framework и наслаждаться остальными (но вы можете запускать Java SE).

Для ответа на ваш вопрос, нет хорошего решения на всех - jni4net и IKVM.net, были на самом деле две совершенно разные вещи вообще, но если вы хотите, чтобы заставить заключение, я хотел бы использование IKVM.net - все еще активный, мощный, расширяемый, но жир и медленный.

+0

Как насчет написания значимого теста? В основном вы измеряете загрузку библиотеки и время JIT, которое происходит только один раз и не имеет отношения к большинству случаев использования. –

+0

Пока я знаю, что LPGL не является ограничивающим. Но спасибо за хорошее объяснение. – myuce