Performance Problem durch mehrfaches Starten eines JAVA Prog

Status
Nicht offen für weitere Antworten.

Chris81T

Mitglied
Hallo zusammen!


Also grundlegend bin ich kein JAVA Programmierer, okay hatte mal ein kleines Spiel programmiert, sondern arbeite vorrangig mit C++ / Qt.

Bei einer Projektvorgabe geht es um eine Verbesserung eines bestehenden Projekts.


Was macht das Projekt / Programm:

Es bekommt ein XML geschickt und besitzt eine passende XSL Vorlage (erstellt durch das XSL Fast Programm für XSL-FO). XSL Fast muss auch weiterhin verwendet werden und kann nicht ersetzt werden. Leider bietet es nur Unterstützung zum Apache FOP und 2 kommerziellen FO Prozessoren.

Diese 2 Formate werden als Parameter mit dem Apache FOP Java Programm transformiert und es kommt ein PDF hinten raus.

Nun zum Problem:

Es kommen beispielsweise in kürzester Zeit so 100 XML Daten an und müssen alle mit schon vorhandenem XSL als PDF transformiert werden, um u.a. zum Drucken bereitzuliegen (also 100 FOP ext. Prozess Aufrufe - multithreaded realisiert), dann wird's schon langsam.

Die zwei kommerziellen Alternativen sind zu teuer.

Gibt es eine Möglichkeit, dass irgendwie zu optimieren? Also das man irgendwie das FOP Programm hochlädt und dann 100 mal ausführen kann?? Irgend sowas in der Art?
Ich kenn mich halt mit der JVM / Java Programme nicht gut aus :(

Hat jemand Rat für mich?


Wäre super :)

Vielen Dank

Gruß Christian


PS: Plattformunabhängigkeit muss auch weiterhin gewährleistet sein Win / Linux
 
T

tuxedo

Gast
>> Diese 2 Formate werden als Parameter mit dem Apache FOP Java Programm transformiert und es kommt ein PDF hinten raus.

Verstehe ich das richtig, dass für jede zu konvertierende XML Datei das Konverterprogramm, geschrieben in Java, gestartet wird und dann also als eigener Prozess im Taskmanager/in der Taskliste zu sehen ist??

Wenn ja, dann erklärt das dein Performance-Problem.
 

Chris81T

Mitglied
>> Verstehe ich das richtig, dass für jede zu konvertierende XML Datei das Konverterprogramm, geschrieben in Java, gestartet wird und dann also als eigener Prozess im Taskmanager/in der Taskliste zu sehen ist??

Hallo,


grundlegend ja.

programmiert wird halt in c++ / qt, dass bedeutet doch, sofern ich mich nicht irre, dass ich das FOP Java Programm doch nur über einen eigenen Prozess innerhalb meines Programms zum laufen bekomme. Oder gibt's ne andre Möglichkeit?

Grundlegend geht die Verarbeitung eines XML + XSL recht schnell (Das JAVA Programm ist ein reines Consolen- Programm). Aber durch jeden neuen Prozess kommen doch noch zusätzliche Laufzeiten zustande (von der Erzeugung mal abgesehen), weil doch dann jedesmal die JVM den Byte- COde vorbereiten muss, bis dieser ausgeführt wird, oder?

So war mein Gedanke, den einmalig vorzubereiten und dann immer wieder zu nutzen, falls es sowas gibt.

Wenn ich ja ein C++ compiliertes Programm starte, habe ich dieses ja direkt zur Verfügung, wenn man es startet.


PS: Es muss nicht zwingend sein, dass 100 Prozesse parallel laufen! Das war nur so in Richtung "worst case"
 
T

tuxedo

Gast
Also den Converter jedesmal neu starten und damit eine komplette JVM starten ist absoluter quatsch. Sowas macht kein "normaler" Mensch (sorry...).

Es gibt genug möglichkeiten Java mit anderen Sprachen zu kombinieren. Sei es JNI oder, auf die altmodische Art, mit einer Socketverbindung.

Ich würde, weil ich JNI nicht mag und es auch wieder zu performanceschwierigkeiten kommen kann wenn wirklich viel zwischen C und Java transportiert wird, zur Socketberbindung greifen.

Sprich: die Java-KOnverter-Anwendung als eine Art Server machen, zu dem sich die C anwendung hinverbindet, die Daten überträgt und Java dann die PDF ausspuckt. Damit reicht eine einzige JVM Instanz die dann in einzelnen Threads die eingehenden Konvertieranfragen bearbeitet.

An der bestehenden Implementierung irgendwas "performanter" machen zu wollen scheint mir unnütz, da vermutlich wirklich der ganze overhead durch das ständige starten und beenden der JVM entsteht.
 

Murray

Top Contributor
Man kann aus einem C(++)-Programm eine Java-VM per JNI erzeugen; diese VM läuft dann im Kontext der Anwendung (es gibt also aus OS-Sicht nur einen Prozess). Und in dieser VM kann man dann Objekte erzeugen und Methode aufrufen (im Prinzip macht die java.exe nichts anderes - sie erzeugt eine VM und ruft dann die (statische) main-Methode der Anwendungsklasse auf). Insofern könntest Du Dir den Prozess-Overhead sparen.
 

Chris81T

Mitglied
@alex

>> Also den Converter jedesmal neu starten und damit eine komplette JVM starten ist absoluter quatsch. Sowas macht kein "normaler" Mensch (sorry...).


Das bestehende Projekt ist nicht auf meinem Mist gewachsen.. Ich gebe dir da natürlich recht, dass das so nicht schön ist! Ganz klar.

Deswegen hab ich gefragt (auch für Alternativen, mein ich...)


Das mit der SOcket- Verbindung ist nicht schlecht, hör sich gut an. An eine solche Lösungsart hatt ich gar net gedacht, da man jetzt erst das eine Problem vor der Nase hatte :)


Also konkreter Ansatz:

Ich muss mir im den FOP Transformator ein JAVA Programm drumrum bauen, dass halt auf eingehende Daten vom "Cpp/Qt Prog." Prozess wartet. Wenn welche kommen, mit nen erzeugenden Thread auf JAVA Basis den FOP nutzen (FOP ist OPenSource) und das pdf transformieren, Thread schließen; usw...

Hast du das so gemeint?

@Murray

danke für den Post


@all:

Vielen Dank schonmal für eure Anregungen! jetzt hab ich was zum Weiterschauen. Falls jemand noch was weis, bitte melden :)
 
T

tuxedo

Gast
Wobei ich mir hab sagen lassen (von meinem Projektleiter während meines Praxissemesters bei Daimler), dass es nicht sehr performant wäre viele Daten via JNI zwischen Java und C auszutauschen. Schneller gehts dann nur noch via Sockets (localhost).

Worauf er sich da gestützt hat: Keine Ahnung, aber ich hab eine bestehende JNI Lösung jedenfalls neu implementieren dürfen, mit Sockets. Und laut meinem Projektleiter war das um um längen schneller als die JNI Lösung.
 

Murray

Top Contributor
alex0801 hat gesagt.:
Wobei ich mir hab sagen lassen (von meinem Projektleiter während meines Praxissemesters bei Daimler), dass es nicht sehr performant wäre viele Daten via JNI zwischen Java und C auszutauschen. Schneller gehts dann nur noch via Sockets (localhost).

Worauf er sich da gestützt hat: Keine Ahnung, aber ich hab eine bestehende JNI Lösung jedenfalls neu implementieren dürfen, mit Sockets. Und laut meinem Projektleiter war das um um längen schneller als die JNI Lösung.

So allgemein würde ich die Aussage "Datenübertragung per JNI ist langsamer als über Sockets" nicht stehen lassen - wenn das in einem konkreten Projekt (ich würde hinzufügen: ausnahmsweise) mal der Fall war, dann ist bei der Neuimplementierung sicher noch deutlich mehr verändert worden. Denn eigentlich muss bei der Übertragung von Daten über Sockets alles passieren, was auch bei JNI passiert (Allokation und später Deallokation der benötigten Speicherbereiche, ggfs. Überführung der Datenrepräsentation aus der C- ind die Java-Welt etc) - nur dass zusätzlich auch noch Prozesswechsel, I/O-Operationen und komplexe Netzwerkprotokolle erforderlich werden.
 
T

tuxedo

Gast
Naja, er hat's damals (ist etwa 3 Jahre her) damit begründet, dass es mehrere JVM Calls bedarf damit die Kommunikation funktioniert. Genau hab ich's nicht verstanden.

Konkret gings um Datenübertragung mit einem CAN-Bus (eine Art Netzwerk, für alle die mit CAN nix anfangen können). Da kommen schon Megabyteweise Daten zusammen.
Aber ich könnte mir vorstellen, dass in diesem Fall hier, auch einiges zusammenkommen kann.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
R DBUnit Performance Probleme Allgemeine Java-Themen 0
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
S starke performance probleme des forums Allgemeine Java-Themen 10
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
T Performance ArrayList#remove Allgemeine Java-Themen 8
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben