2016-06-20 3 views
1

enter image description hereвремя Я в VisualVM занимает больше времени, чем остальные

запуск программы в режиме отладки, и я обнаружил, что использование CPU идет вверх для первого метода. Способы останова используют только небольшое использование ЦП.

Может ли кто-нибудь указать мне, почему первый метод требует гораздо более высокой загрузки ЦП (почти 100%)? Как я могу уменьшить его?

+0

показать нам ваш метод –

+0

'общественного недействительными MyMethod (String ParamName, подключение DBConn) { \t \t \t \t попробовать { \t \t \t если (dbConn.isValid (10)) { \t \t \t \t \t \t \t \t \t \t \t \t Оператор CallableStatement = dbConn.prepareCall ("{call myStoreProcedure } ") (?); \t \t \t \t statement.setString ("param", paramName); \t \t \t \t statement.execute(); \t \t \t \t System.out.println («Инструкция для создания NgsScannedData:»); \t \t \t \t statement.close(); \t \t \t} \t \t} поймать (SQLException е) { \t \t \t e.printStackTrace(); \t \t} \t} ' – goutthee

+0

Большая часть вашего метода вызывает другие функции. Это странно. Возможно ли, что gc происходит правильно, когда вызывающий стек находится в методе? Упомянутая причина мне любопытно. – waltersu

ответ

1

Самостоятельное время не измеряет использование ЦП. Он измеряет время настенных часов. Вот почему есть Total Time, Total Time (CPU), Self Time и Self Time (CPU). Self Time (CPU) будет интересной частью, когда вы ищете горячие точки в своем коде.

В качестве примера, если у вас есть спальник нить (только спать, без работы, чтобы сделать), это даст вам 100% для Self Time (и то же время для общего времени), но 0 для CPU.

+0

Вызов Thread.sleep() вызывает другую функцию, и это часть * Total Time *, но не часть * Self Time *. – waltersu

+0

'Thread.sleep();' вызывает собственный метод, который получит полное 'self time 'без использования процессора. – Kayaman