Frage

Ich Schreibe ein einfaches Dame-Spiel in Java.Wenn ich mit der Maus über das Brett mein Prozessor Rampen bis zu 50% (100% auf einem Kern).

Ich würde gerne herausfinden, was ein Teil von meinem code(vorausgesetzt, es ist mein Fehler) ausgeführt wird, während dieser.

Ich habe versucht zu Debuggen, aber step-through-debugging funktioniert nicht sehr gut in diesem Fall.

Gibt es irgendein tool, dass können Sie mir sagen, wo mein problem liegt?Ich bin derzeit mit Eclipse.

War es hilfreich?

Lösung

Dies wird als "profiling".Die IDE kommt wahrscheinlich mit einem:finden Open-Source-Profiler in Java.

Andere Tipps

Verwenden Sie einen profiler (e.g yourkit )

Profiling?Ich weiß nicht, welche IDE Sie verwenden, aber Eclipse hat eine anständige proflier und es wird auch eine Liste von einigen open-source-Profiler an java-source.

In einer nussschale, Profiler erfahren Sie, welcher Teil des Programms aufgerufen wird, ist, wie viele oft.

Ich nicht Profil meine Programme sehr viel, also ich habe nicht allzu viel Erfahrung, aber ich habe gespielt, um mit dem NetBeans IDE profiler, wenn ich testete es aus.(Normalerweise verwende ich Eclipse als gut.Ich werde auch einen Blick in die profiling-Funktionen in Eclipse.)

Der NetBeans-profiler wird Ihnen sagen, welcher thread ausgeführt wurde, wie lange, und welche Methoden aufgerufen wurden, wie lange, und geben Sie Balkendiagramme zeigen an, wie viel Zeit jede Methode hat genommen.Dies sollte Ihnen einen Hinweis auf die Methode, die Probleme verursacht.Sie können einen Blick auf die Java-profiler dass die NetBeans IDE bietet, wenn Sie neugierig sind.

Profiling ist eine Technik, die üblicherweise verwendet wird, um zu Messen, welche Teile eines Programms ist dabei viel Ausführungszeit, die wiederum verwendet werden können, zu beurteilen, ob oder nicht der Durchführung der Optimierungen von Vorteil wäre, zur Erhöhung der Leistung ein Programm.

Viel Glück!

1) ist Es deine Schuld :)

2) Wenn Sie mit eclipse oder netbeans verwenden, versuchen Sie die profiling-features-es sollte ziemlich schnell sagen, wo Ihr code wird viel Zeit damit verbringen.

3) wenn das fehlschlägt, fügen Sie die Ausgabe in der Konsole, wo Sie denken, die innere Schleife ist-Sie sollten in der Lage sein, schnell wieder zu finden.

Ja, es gibt solche tools:Sie haben ein Profil der code.Sie können entweder versuchen TPTP in eclipse oder vielleicht versuchen JProfiler., Dass wird lassen Sie Sie sehen, was aufgerufen wird und wie oft.

Einen profiler verwenden.Es gibt viele.Hier ist eine Liste: http://java-source.net/open-source/profilers.Zum Beispiel können Sie verwenden JIP, ein in java codiert profiler.

Clover geben einen schönen Bericht, der Treffer zählt für jede Zeile und Zweig.Für Beispiel, diese Linie ausgeführt wurde 7-mal.

Plugins für Eclipse, Maven, Ant und IDEE sind verfügbar.Es ist kostenlos für open source, oder Sie bekommen eine 30 Tage Test-Lizenz.

Wenn Sie mit Sun Java 6, dann die aktuellste JDK-Versionen kommen mit JVisualVM in das bin-Verzeichnis.Dies ist ein leistungsfähiges überwachungs-und profiling-tool, das erfordert sehr wenig Aufwand zu bedienen - Sie brauchen noch nicht einmal zu starten Sie Ihr Programm mit spezieller Parameter - JVisualVM einfach listet alle aktuell Laufenden java-Prozesse, und Sie wählen die, die Sie wollen, zu spielen.

Dieses tool wird Ihnen sagen, welche Methoden verwenden die Prozessor-Zeit.

Es gibt viele weitere leistungsstarke tools gibt, haben aber ein Spiel mit einem gratis-einer der ersten.Dann, wenn Sie darüber Lesen, was andere Funktionen sind verfügbar da draußen, haben Sie ein Farbwerk, wie Sie Ihnen helfen könnten.

Dies ist eine in der Regel "High CPU" problem.

Es gibt zwei Arten von hohe CPU-Probleme

a) Wo auf der Faden ist mit 100% CPU, einem core (Dieser ist in Ihrem Szenario)

b) die CPU-Auslastung ist "ungewöhnlich hoch", wenn wir bestimmte Aktionen ausführen.In solchen Fällen ist die CPU kann nicht werden 100% werden aber ungewöhnlich hoch.In der Regel geschieht dies, wenn wir die CPU-intensive Vorgänge im code wie XML-parsing -, Serialisierungs-de-Serialisierung etc.

Fall (a) ist einfach zu analysieren.Wenn Sie Erfahrung 100% CPU 5-6 thread-dumps in 30 Sek. - Intervall.Suchen Sie nach einem thread, die aktiv ist ("runnable" - Zustand) und die in der gleichen Methode (Sie können daraus schließen, dass durch die überwachung der thread-stack).Die meisten wahrscheinlich, dass Sie werden sehen, ein "busy wait" (siehe code unten für ein Beispiel)

while(true){
  if(status) break;
  // Thread.sleep(60000); // such a statement would have avoided busy wait
}

Fall (b) kann auch analysiert werden, mit thread-dumps genommen in den gleichen Intervall.Wenn Sie Glück haben, werden Sie in der Lage sein zu finden heraus die problem von code, Wenn Sie sind nicht in der Lage zu identifizieren die problem von code mit thread-dump.Müssen Sie resort-Profiler.In meiner Erfahrung YourKit profiler ist sehr gut.

Ich versuche immer mit thread-dumps zu erste.Profiler wird nur der Letzte Ausweg.In 80% der Fälle sind wir in der Lage zu identifizieren, die mit thread-dumps.

Oder verwenden Sie JUnit-Testfälle und code-coverage-tool für einige gemeinsame Komponenten von Ihnen.Wenn es sind Komponenten, die andere Komponenten, werden Sie schnell sehen Hingerichteten viele weitere Male.

Ich benutze Clover mit JUnit-Testfälle, aber für open-source, höre ich EMMA ist ziemlich gut.

In single-Thread-code, ich finde das hinzufügen einiger Aussagen wie diese:System.aus.println("A:"+ System.currentTimeMillis());einfacher und ebenso wirksam ist wie die Verwendung eines Profilers.Schon bald können Sie verengen den Teil des Codes das problem verursacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top