Ant Java task bietet fork
Parameter, die per Definition "wenn aktiviert aktiviert die Klassenausführung in einer anderen VM". Da wir mit einer großen Datenmenge zu tun haben, hat uns die Einstellung dieses Parameters davor bewahrt, dass der Java-Heap-Speicher aufgebraucht ist.
Wir wollen in der Lage sein, das gleiche über eine Java-Klasse zu tun. Was wäre der beste Weg, um die Funktionalität von fork
zu erreichen?Java-Äquivalent von Fork in Java-Aufgabe von Ant?
Antwort
Einen weiteren Java-Prozess ausführen. Beispielsweise durch die Verwendung der ProcessBuilder-Klasse.
http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html
Sie können so viele Arbeitsprozesse laufen wie Sie wollen. Machen Sie sie zu einer separaten Hauptklasse, erledigen Sie ihre Aufgaben von dieser Hauptklasse und beenden Sie ihre Aufgabe.
Sie müssen herausfinden, ihre Klassenpfad und die Position von Java-Binärdateien auf dem System, aber das ist machbar.
Ich denke, Sie können sogar benachrichtigt werden, wenn sie über Process.waitFor() abgeschlossen werden.
Ich denke, es wäre jedoch in der gleichen VM. –
Nein, wenn Sie einen Prozess ausführen, ist es die andere VM. Zwei verschiedene Prozesse können auf keinen Fall eine VM gemeinsam nutzen. – alamar
Ich denke, Sie können direkt die Ant-API verwenden ... Ant kann direkt in einer Java-Klasse verwendet werden. Das Javadoc ist in ihrer Binärdistribution verfügbar.
Wenn Sie an der ant
Quellcode schauen, wenn fork
true
ist, dann wickelt es nur eine Execute
Aufgabe und schließlich der Code,
Runtime.getRuntime().exec(cmd, env);
Download ist aufgerufen wird und einen Blick auf den Quellcode für org.apache.tools.ant.taskdefs.Java
und org.apache.tools.ant.taskdefs.Execute
gibt Ihnen einige gute Zeiger in der Suche nach dem Speicherort der ausführbaren Datei auf einer plattformunabhängigen Art und Weise usw.
- 1. Groovyc ant Task schlägt mit fork = "true"
- 2. Verwendung von fork() falsch?
- 3. Verwendung von fork() in Hersteller/Verbraucher
- 4. Ausführen von Junit4 Tests mit Ant 1.9.4 (jvm Absturz mit fork = "true")
- 5. Verwendung von Ant in Mercurial
- 6. JAXBElement in Klassen von wsimport von ant
- 7. Externe Protokolldateien von Ant
- 8. Arbeitsverzeichnis von Ant finden
- 9. Verknüpfen von Ant-Builddateien
- 10. if (fork()) fork()
- 11. Ziehen von Änderungen von Fork Parent in Git
- 12. substring string von ant
- 13. Einschließen von Third-Party-Jars ANT
- 14. java.lang.NoClassDefFoundError beim Start von Tomcat 7 von Ant
- 15. Wie effizient Debug Prozesse erstellt von fork()
- 16. GitHub Fork ein Repo von früheren commit
- 17. Fork-Implementierung in Perl
- 18. Kopieren von Inhalt von Unterordnern mit Ant
- 19. Ant ersetzen Token von Eigenschaften
- 20. Filtern von Dateien mit Ant?
- 21. Kompilieren von SOA mit Ant
- 22. Warum wird sys_fork nicht von glibcs Implementierung von fork verwendet?
- 23. Fork, Ruby, ActiveRecord und Dateideskriptoren auf Fork
- 24. Verwendung von Ant Javac Adapter
- 25. ANT Skriptbehandlung Rückgabewert von exec
- 26. Wie eine xml von ANT
- 27. Nützlichkeit von fork() außer Ausführen von fremden Programmen
- 28. fork in freeBSD unix
- 29. Fork Concept in C#
- 30. Verweis auf Zeiger nach einem Aufruf von fork() in C
Wenn alles, was Sie brauchen, ist mehr Heap als die Verwendung der Optionen -Xmx und -Xms, wenn Sie starten deine App Vielleicht brauchen Sie nicht mehrere Prozesse, sondern nur mehr Speicher. Es gibt einen zusätzlichen Vorteil, dass Sie innerhalb derselben JVM Threads und Parallelitätsprimitive verwenden können. – basszero
Rechts. Wir haben das versucht, indem wir Xms und Xmx auf verschiedene Werte gesetzt haben, aber das hat nicht geholfen. Das Programm stürzte schließlich ab, nachdem es für unterschiedliche Dauer ausgeführt wurde, abhängig von den eingestellten Werten. Offensichtlich hat es etwas mit Speicher zu tun, aber wir haben es nie gesehen, als wir es über Ant (mit Fork Set) aufgerufen haben. – pugmarx