Может так сложиться, что мне придётся интегрировать в специфический сервер (c++) часть api, написанного на java. Нарыл в сети опичание сабжа. Насколько я понял, он подгружает в адресное пространства процесса специфическую jvm и каким-то образом маршалит вызовы к ней. Но поскольку я сам никогда с java не работал, меня терзают смутные сомнения по поводу быстродействия такой конструкции. Кто-нибудь работал с сабжем и может меня просветить на этот счёт?
Немного информации о приложении. Сервер является по сути шлюзом между двумя довольно сложными распределёнными системами. Транспортный уровень — tcp-сокеты. На входе и выходе несколько очень активных соединений (несколько МБ/с), по которым ходит большое количество мелких (1-2 кБ) сообщений, которые надо помимо прочего переслать нужному адресату.
"Наша" часть написана на плюсах, и проблем не вызывает. Самым логичным на мой взгляд было бы реализовать внешний протокол так же на плюсах, но может иметь место "административный ресурс", поэтому заранее готолюсь к варианту спаривания с++ и java. Или же может быть будет проще обе части писать на java?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, frogkiller, Вы писали:
F>>Может так сложиться, что мне придётся интегрировать в специфический сервер (c++) часть api, написанного на java. Нарыл в сети опичание сабжа. Насколько я понял, он подгружает в адресное пространства процесса специфическую jvm и каким-то образом маршалит вызовы к ней. Но поскольку я сам никогда с java не работал, меня терзают смутные сомнения по поводу быстродействия такой конструкции. Кто-нибудь работал с сабжем и может меня просветить на этот счёт?
CS>В JNI нет никакого маршалинга. Из C++ ты создаешь объекты типа Java строк или массивов напрямую в Java memory heap.
А как же GC, потоки и тд? Или есть сильные ограничения на то, что с помощью этого JNI можно делать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
frogkiller wrote:
> CS>В JNI нет никакого маршалинга. Из C++ ты создаешь объекты типа Java
> строк или массивов напрямую в Java memory heap.
> А как же GC, потоки и тд? Или есть сильные ограничения на то, что с
> помощью этого JNI можно делать?
Ограничений нет — можно делать все, что делает обычный код на Java.
Естественно, надо все делать аккуратно — иначе получим утечки или
падения JVM.
Posted via RSDN NNTP Server 2.1 beta
c-smile wrote:
> Объекты в native code создаются в состоянии "пришпиленный" ( pinned ,
> как лучше перевести?)
> Для копирвания например массива ты должен заблокировать его, скопировать
> чего надо и отпустить блок.
> Ну и под конец сделать release этого pinned handle.
Не совсем так. Большая часть работы идет через handle'ы с дополнительной
косвенностью. Пришпиливание осуществляют только несколько вызовов
(GetXXXXArrayElements и вроде еще парочка).
Тут вот подробнее:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html#pinPosted via RSDN NNTP Server 2.1 beta