痛苦的慢JVM不是由内存泄漏造成的?

问题描述 投票:-2回答:4

我使用eclipse进行Java编程,运行JVM几个小时之后,我的程序往往会慢慢变成涓涓细流。通常在几分之一秒内打印(或执行)的内容需要几分钟或几小时。

我知道这通常是由程序中的内存泄漏引起的。但是,我认为内存泄漏会降低PC的速度,因为它会占用大部分CPU资源进行垃圾回收。当我看一下任务管理器时,我目前只看到22-25%的CPU被使用(它在过去几个小时内保持稳定)和大约。我的机器上有35%的可用内存。

我的程序的减速可能是由内存泄漏以外的其他东西引起的,还是肯定是内存泄漏(这意味着我现在需要仔细检查以查找泄漏源...)如果是,为什么会CPU使用率相对较低?

谢谢

java eclipse memory-leaks jvm
4个回答
0
投票

好吧,首先,内存泄漏/任何其他故障不会影响您的PC或您的计算机的任何其他部分,除非您引用一些窒息的外部资源。要回答你的问题,一般来说,尽管CPU可能会导致程序运行速度变慢,但在你的情况下,由于你的程序/进程逐渐变慢,很可能你的代码中存在内存泄漏。

您可以使用任何探查器/ VIsualVM来监视内存使用/对象的状态以确定问题。


0
投票

您可能知道现代计算机系统有多个CPU核心。单线程程序将仅使用单个核心,这与任务管理器一致,报告总体CPU使用率为25%(1个核心满载,3个核心空闲= 25%使用的总CPU容量)。

垃圾收集会导致速度减慢,但通常只有在JVM受内存限制的情况下才会这样做。要验证它是否是垃圾收集,您可以使用jconsole或jvisualvm(它们是JDK的一部分)来查看执行垃圾收集所花费的CPU时间。

要调查您的程序运行缓慢的原因,使用分析器通常是最有效的方法。


0
投票

我想我们不能直截了当地说这个问题。您需要使用jconsole vs visualvm来检查程序的行为,而visualvm是JDK的一部分。


0
投票

有时,当您对对象或实体有循环关系时会发生这种情况。 JVM尝试读取数据或绑定通过同一组对象循环的数据,这极大地影响了JVM的性能;大多数时候甚至会崩溃应用程序。与前面的答案一样,您可以使用jconsole来检查这种情况发生的时间并采取措施。希望你能得到这个想法;可能事实并非如此,这是我在阅读你的问题时想到的。

干杯!!!

© www.soinside.com 2019 - 2024. All rights reserved.