Ant Java task fournit le paramètre fork
qui, par définition "si activé, déclenche l'exécution de la classe dans une autre machine virtuelle". Comme nous traitons une grande quantité de données, la définition de ce paramètre nous a évité de manquer d'espace de tas Java.
Nous voulons être en mesure de faire la même chose à travers une classe Java. Quel serait le meilleur moyen d'atteindre les fonctionnalités fournies par fork
?Java équivalent de fork dans la tâche Java de Ant?
Répondre
Exécuter un autre processus Java. En utilisant la classe ProcessBuilder, par exemple.
http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html
Vous pouvez exécuter autant de processus de travail que vous le souhaitez. Faites-leur une classe principale distincte, exécutez leurs tâches à partir de cette classe principale et quittez leur tâche une fois leur tâche terminée.
Vous devrez trouver leur chemin de classe, et l'emplacement de binaire java sur le système, mais c'est faisable.
Je pense que vous pouvez même être averti quand ils complètent via Process.waitFor().
Je pense que ce serait dans la même machine virtuelle, cependant. –
Non, si vous exécutez un Process, c'est la VM différente. Deux processus différents ne peuvent pas partager une machine virtuelle par quelque moyen que ce soit. – alamar
Je pense que vous pouvez directement utiliser l'API Ant ... Ant peut être directement utilisé dans une classe Java. Le Javadoc est disponible dans leur distribution binaire.
Si vous regardez le code source ant
, quand fork
est true
, il enveloppe juste une tâche Execute
et éventuellement, le code qui est appelé est
Runtime.getRuntime().exec(cmd, env);
Téléchargement et avoir un regard sur le code source
- 1. Sortie de la tâche java dans Ant
- 2. ClassNotFoundException avec la tâche java de ant et classpath
- 3. La tâche java de ant ne trouve pas de jar dans le répertoire jre/lib/ext
- 4. java équivalent de swfobject
- 5. Problème simple de construction de Java Ant
- 6. Définition de la version cible de Java dans ant javac
- 7. Java invokeLater() équivalent dans Windows Forms?
- 8. C++ équivalent de Java ByteBuffer?
- 9. Où puis-je obtenir la tâche Ant Ant Ant?
- 10. Ant - Commande Java - IllegalAccessException
- 11. Exécuteurs Java: attente de la fin de la tâche.
- 12. 'Amis' équivalent pour Java?
- 13. Java équivalent à
- 14. STXXL équivalent en Java
- 15. Comment trouver une ressource JNDI dans la tâche Ant hibernatetool
- 16. Équivalent Objective-C de BlockingQueue de Java?
- 17. Java équivalent à WPF
- 18. Java équivalent à pyftpdlib?
- 19. Ant équivalent de nant.onsuccess/nant.onfailure
- 20. C# Java HashMap équivalent
- 21. Équivalent DataTable en Java
- 22. équivalent Java de String.match() de JavaScript
- 23. Maven: les classes Java ne sont pas compilées après la tâche Ant
- 24. tâche groovy ant
- 25. Ant utilise mauvaise version java
- 26. ASP.NET/IIS équivalent de la racine de contexte Java/WAS
- 27. C# équivalent à DigestUtils.md5Hex de Java (chaîne)?
- 28. C# équivalent de Java par exemple initialiseur
- 29. Ant course de commande avec des tuyaux
- 30. . NET équivalent aux groupes de threads Java?
Si tout ce dont vous avez besoin est plus de tas que d'envisager d'utiliser les options -Xmx et -Xms lors du lancement de l'application. votre application Peut-être que vous n'avez pas besoin de plusieurs processus, juste plus de mémoire en premier lieu. Il y a un avantage supplémentaire au sein de la même JVM, vous pouvez utiliser des threads et des primitives de concurrence. – basszero
Droite. Nous avons essayé cela en réglant le Xms et Xmx à différentes valeurs, mais cela n'a pas aidé. Le programme s'est finalement écrasé après avoir fonctionné pendant des durées différentes, en fonction des valeurs définies. Apparemment, cela a à voir avec la mémoire, mais nous n'avons jamais été confrontés quand nous l'avons appelé via Ant (avec fourchette). – pugmarx