Beim Versuch zu debuggen, warum meine Multi-Thread-Java-Anwendung große Menge an CPU verbraucht, habe ich festgestellt, dass jeder Thread einen externen Befehl ausführt, der überhaupt nicht CPU-intensiv ist, aber wenn Java es ausführt, ich Finde Java-Laufzeit, die 100% meiner CPU verbraucht.externe Prozess machen Java verbrauchen viel CPU
Um weiter zu debuggen, habe ich diesen externen Prozess mit einfachen Linux "ls" -Befehl ersetzt. hier ist, wie ich it-
String[] commands = new String[]{"/bin/sh", "-c", "ls"};
try {
Process p = Runtime.getRuntime().exec(commands);
} catch (IOException ex) {
//
}
bin immer noch läuft, sehe ich Java alle der CPU.
Ich lese überhaupt keine Ausgabe aus dem Prozess, noch irgendeine Art von Stream zu öffnen.
Was könnte falsch sein? Wie kommt es, dass ein einfacher Befehl ls
, wenn er extern von Java ausgeführt wird, dazu führt, dass die Java-Laufzeit große CPU verbraucht?
Stattdessen externen Befehl ausgeführt wird, Thread-Verarbeitung zu simulieren, habe ich versucht, Putting Thread.Sleep() und es funktioniert fein- nicht mehr CPU hog