[C++] + [Java] = JNI. Braucht man das?

Eine Frage Leude,

hat jemand von euch schonmal mit JNI gearbeitet?

Das war alles, was ich wissen wollte xd . Mich interessiert nur hauptsächlich, ob ihr damit gearbeitet habt und in welchen Situationen.

Na klar, C++ ist performanter und so, aber zerstört es nicht das Prinzip von Java? Portabilität? Zudem ist es auch so, dass es doch dauert, bis der Interpreter von Java zu C++ switcht.
 
JNI ist ein fundemntaler Grundstein von Java. Ohne JNI oder JNA würde Java wohl deutlich unoptimierter sein. Beispiele finden sich zum Beispiel bei BungeeCord und seiner nativen Verschlüsselung / Komprimierung von Paketen. Wie du schon sagtest ist die Ausführung von plattformabhängigem Code performanter anstatt durch Virtualisierung und Emulation plattformunabhängigen Code auszuführen. Zudem kannst du ohne native Bibliotheken nicht auf systeminterne Aufrufe setzen. Epoll würde damit auf Unixoiden Systemen schon mal nicht laufen.
 
Oh - hm, ich habe mich ja auch nie mit dem Source-Code von BungeeCord beschäftigt...

Ähm, trotzdem sollte doch der Leistungsunterschied nicht so groß sein, wenn die Packets auch in "purem" Java verschlüsselt/komprimiert werden..., oder?
 
Ich habe mir jetzt keine Benchmarks dazu angesehen. Allerdings kann ich sagen, dass native Verschlüsselung und Kompression mit einem Kompromiss umgesetzt werden müssen. Es muss zwingend direkter Arbeitsspeicher adressiert werden, welcher nicht durch die VM garbage collected wird. D.h. ein Memory Leak kann zum Desaster werden. Du kannst das Leak dann auch nicht so einfach finden, da heap dumps eben nur den heap memory beinhalten und nicht den direkten memory.
 
Top