2016-06-20 10 views
1

enter image description hereSelbst Zeit in VisualVM dauert länger als der Rest

ich mein Programm im Debug-Modus laufen und ich fand, dass die CPU-Auslastung für das erste Verfahren geht nach oben. Die Restmethoden benötigen nur eine geringe CPU-Auslastung.

Kann mir jemand zeigen, warum die erste Methode eine viel höhere CPU-Auslastung (fast 100%) benötigt? Wie kann ich es verringern?

+0

zeigen Sie uns Ihre Methode –

+0

'public void myMethod (String paramName, Verbindung dbconn) { \t \t \t \t try { \t \t \t if (dbConn.isValid (10)) { \t \t \t \t \t \t \t \t \t \t \t \t CallableStatement-Anweisung = dbConn.prepareCall ("{myStoreProcedure aufrufen (?)} "); \t \t \t \t Anweisung.setString ("param", paramName); \t \t \t \t statement.execute(); \t \t \t \t System.out.println ("Anweisung zum Erstellen von NgsScannedData:"); \t \t \t \t statement.close(); \t \t \t } \t \t} catch (SQLException e) { \t \t \t e.printStackTrace(); \t \t} \t} ' – goutthee

+0

Die meisten Ihrer Methode rufen andere Funktion. Das ist seltsam. Ist es möglich, dass gc genau dann passiert, wenn der aufrufende Stack bei der Methode ist? Upvoted Ursache bin ich neugierig. – waltersu

Antwort

1

Eigenzeit misst nicht die CPU-Auslastung. Es misst die Wanduhrzeit. Deshalb gibt es Total Time, Total Time (CPU), Self Time und Self Time (CPU). Self Time (CPU) wäre der interessante Teil, wenn Sie nach Hotspots in Ihrem Code suchen.

Als Beispiel, wenn Sie einen Schlaf Thread (nur ohne Arbeit schlafen, zu tun) würde es Ihnen, gibt 100% für Self Time (und gleichzeitig die Gesamtzeit), aber 0 für CPU.

+0

Aufruf von Thread.sleep() ruft andere Funktion, und es ist Teil von * Gesamtzeit *, aber nicht Teil von * Self Time *. – waltersu

+0

'Thread.sleep();' ruft eine native Methode auf, die die volle 'self time 'ohne CPU-Auslastung erhält. – Kayaman

Verwandte Themen