Уж больно медленная JVM не вызвана утечкой памяти? - PullRequest
0 голосов
/ 12 марта 2019

Я программирую на Java, используя Eclipse, и после запуска JVM в течение нескольких часов моя программа имеет тенденцию к замедлению.То, что обычно печатается (или выполняется) в течение нескольких долей секунды, занимает пару минут или часов.

Я знаю, что это обычно вызывается утечкой памяти в программе.Однако у меня сложилось впечатление, что утечка памяти замедляет работу ПК, поскольку он использует большую часть ресурсов процессора для сбора мусора.Когда я смотрю на диспетчер задач, я вижу только 22-25% процессорного времени, используемого в данный момент (он оставался стабильным в течение последних нескольких часов) и ок.35% свободной памяти на моей машине.

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

Спасибо

Ответы [ 4 ]

0 голосов
/ 12 марта 2019

Иногда это происходит, когда у вас есть петлевые отношения над вашими объектами или объектами.JVM пытается считывать данные или связывать циклы данных через один и тот же набор объектов, что резко влияет на производительность JVM;Большую часть времени сбой приложения даже.Как и в предыдущем ответе, вы можете использовать jconsole, чтобы проверить, в какое время это происходит, и принять меры.Надеюсь, вы поняли идею;может быть, это не тот случай, это то, что пришло мне в голову, когда я прочитал ваш вопрос.

ура !!!

0 голосов
/ 12 марта 2019

Возможно, вы знаете, что современная компьютерная система имеет более одного ядра процессора. Однопоточная программа будет использовать только одно ядро, что согласуется с тем, что диспетчер задач сообщает об общем использовании ЦП 25% (1 ядро ​​полностью загружено, 3 ядра бездействуют = 25% используется общая мощность ЦП).

Сборка мусора может вызвать замедление, но обычно это происходит только в том случае, если JVM ограничена в памяти. Чтобы проверить, является ли это сборкой мусора, вы можете использовать jconsole или jvisualvm (которые являются частью JDK), чтобы увидеть, сколько процессорного времени было потрачено на сборку мусора.

Чтобы выяснить, почему ваша программа работает медленно, использование профилировщика обычно является наиболее эффективным подходом.

0 голосов
/ 12 марта 2019

Я думаю, что мы не можем ничего сказать прямо по этому вопросу. Вам нужно проверить поведение вашей программы, используя jconsole или jvisualvm, который является частью JDK.

0 голосов
/ 12 марта 2019

Во-первых, утечка памяти / любая другая неисправность не влияет на ваш компьютер или любую другую часть вашего компьютера, если вы не ссылаетесь на какой-то внешний ресурс, который задыхается. Чтобы ответить на ваш вопрос, вообще говоря, хотя есть вероятность, что замедление вашей программы может быть вызвано процессором, в вашем случае, однако, поскольку ваша программа / процесс идет медленно, скорее всего, в вашем коде есть утечка памяти.

Вы можете использовать любой профилировщик / jVIsualVM для мониторинга использования объекта mermoy / состояния объекта для выявления проблемы.

...