我正在使用eclipse在Java中进行编程,并且在运行JVM几个小时之后,我的程序趋于缓慢运行。通常在几分之一秒内打印(或执行)的过程需要几分钟或几小时。
我知道这通常是由程序中的内存泄漏引起的。但是,我给人的印象是内存泄漏会减慢PC的速度,因为它将大部分CPU能力用于垃圾回收。当我看一看任务管理器时,我只看到当前使用的CPU的22%到25%(在过去的几个小时中一直保持稳定),并且大约是。我的计算机上有35%的可用内存。
我的程序变慢可能是由内存泄漏以外的原因引起的,还是可以肯定的是内存泄漏(这意味着我现在需要仔细查看泄漏源。) ,为什么CPU使用率会相对较低?
谢谢
答案 0 :(得分:0)
您可能知道现代计算机系统具有多个CPU内核。单线程程序将仅使用一个内核,这与任务管理器报告的总体cpu使用率为25%一致(1个内核已满载,3个内核空闲= 25%的总cpu容量)。
垃圾回收可能会导致速度降低,但是通常只有在JVM内存受限的情况下才会这样做。要验证它是否为垃圾回收,可以使用jconsole或jvisualvm(它们是JDK的一部分)来查看进行垃圾回收所花费的CPU时间。
要调查您的程序运行缓慢的原因,通常使用分析器是最有效的方法。
答案 1 :(得分:0)
我认为我们不能就此问题直言不讳。您需要使用JDK的jconsole或jvisualvm检查程序的行为。
答案 2 :(得分:0)
有时,当您对对象或实体具有循环关系时,会发生这种情况。 JVM尝试读取数据或通过同一组对象绑定数据循环,这将严重影响JVM的性能。大多数时候甚至使应用程序崩溃。与前面的答案一样,您可以使用jconsole来检查发生在什么时间并采取措施。希望你能明白。可能不是这样,这是我读到您的问题时想到的。
欢呼!