INVOCATION API
От: frogkiller Россия  
Дата: 16.08.07 12:43
Оценка:
Может так сложиться, что мне придётся интегрировать в специфический сервер (c++) часть api, написанного на java. Нарыл в сети опичание сабжа. Насколько я понял, он подгружает в адресное пространства процесса специфическую jvm и каким-то образом маршалит вызовы к ней. Но поскольку я сам никогда с java не работал, меня терзают смутные сомнения по поводу быстродействия такой конструкции. Кто-нибудь работал с сабжем и может меня просветить на этот счёт?

Немного информации о приложении. Сервер является по сути шлюзом между двумя довольно сложными распределёнными системами. Транспортный уровень — tcp-сокеты. На входе и выходе несколько очень активных соединений (несколько МБ/с), по которым ходит большое количество мелких (1-2 кБ) сообщений, которые надо помимо прочего переслать нужному адресату.
"Наша" часть написана на плюсах, и проблем не вызывает. Самым логичным на мой взгляд было бы реализовать внешний протокол так же на плюсах, но может иметь место "административный ресурс", поэтому заранее готолюсь к варианту спаривания с++ и java. Или же может быть будет проще обе части писать на java?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: INVOCATION API
От: c-smile Канада http://terrainformatica.com
Дата: 16.08.07 17:44
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Может так сложиться, что мне придётся интегрировать в специфический сервер (c++) часть api, написанного на java. Нарыл в сети опичание сабжа. Насколько я понял, он подгружает в адресное пространства процесса специфическую jvm и каким-то образом маршалит вызовы к ней. Но поскольку я сам никогда с java не работал, меня терзают смутные сомнения по поводу быстродействия такой конструкции. Кто-нибудь работал с сабжем и может меня просветить на этот счёт?


В JNI нет никакого маршалинга. Из C++ ты создаешь объекты типа Java строк или массивов напрямую в Java memory heap.
Re[2]: INVOCATION API
От: frogkiller Россия  
Дата: 17.08.07 10:59
Оценка:
Здравствуйте, 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>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[3]: INVOCATION API
От: Cyberax Марс  
Дата: 17.08.07 13:01
Оценка:
frogkiller wrote:
> CS>В JNI нет никакого маршалинга. Из C++ ты создаешь объекты типа Java
> строк или массивов напрямую в Java memory heap.
> А как же GC, потоки и тд? Или есть сильные ограничения на то, что с
> помощью этого JNI можно делать?
Ограничений нет — можно делать все, что делает обычный код на Java.
Естественно, надо все делать аккуратно — иначе получим утечки или
падения JVM.
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[3]: INVOCATION API
От: c-smile Канада http://terrainformatica.com
Дата: 17.08.07 16:33
Оценка:
Здравствуйте, frogkiller, Вы писали:

CS>>В JNI нет никакого маршалинга. Из C++ ты создаешь объекты типа Java строк или массивов напрямую в Java memory heap.

F>А как же GC, потоки и тд? Или есть сильные ограничения на то, что с помощью этого JNI можно делать?

Объекты в native code создаются в состоянии "пришпиленный" ( pinned , как лучше перевести?)
Для копирвания например массива ты должен заблокировать его, скопировать чего надо и отпустить блок.
Ну и под конец сделать release этого pinned handle.
Re[4]: INVOCATION API
От: Cyberax Марс  
Дата: 17.08.07 16:52
Оценка: 17 (2)
c-smile wrote:
> Объекты в native code создаются в состоянии "пришпиленный" ( pinned ,
> как лучше перевести?)
> Для копирвания например массива ты должен заблокировать его, скопировать
> чего надо и отпустить блок.
> Ну и под конец сделать release этого pinned handle.
Не совсем так. Большая часть работы идет через handle'ы с дополнительной
косвенностью. Пришпиливание осуществляют только несколько вызовов
(GetXXXXArrayElements и вроде еще парочка).

Тут вот подробнее:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html#pin
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.