Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 永磁空间:要实现的理想行为_Java_Eclipse_Performance_Memory_Permgen - Fatal编程技术网

Java 永磁空间:要实现的理想行为

Java 永磁空间:要实现的理想行为,java,eclipse,performance,memory,permgen,Java,Eclipse,Performance,Memory,Permgen,我试图分析/评测一个核心JAVA应用程序 我将JConsole与一起使用 我在Perm Gen图表中观察到以下情况(在Windows XP机器上记录的数据持续时间为1小时): 代码缓存: 录制开始时:7MB 1小时后:10.5 MB 图中显示的是:斜线以一定的间隔略微向上增加 内存池Perm Gen(共享rw): 录制开始时:7MB 1小时后:7 MB 图形看起来像:平行于X轴 内存池Perm Gen(共享-r0): 录制开始时:5.5MB 1小时后:5.5MB 图形看起来像:平行于X

我试图分析/评测一个核心JAVA应用程序

我将JConsole与一起使用

我在Perm Gen图表中观察到以下情况(在Windows XP机器上记录的数据持续时间为1小时):

代码缓存:

  • 录制开始时:7MB
  • 1小时后:10.5 MB
  • 图中显示的是:斜线以一定的间隔略微向上增加
内存池Perm Gen(共享rw):

  • 录制开始时:7MB
  • 1小时后:7 MB
  • 图形看起来像:平行于X轴
内存池Perm Gen(共享-r0):

  • 录制开始时:5.5MB
  • 1小时后:5.5MB
  • 图形看起来像:平行于X轴
内存池:

  • 录制开始时:21MB
  • 1小时后:22.5 MB
  • 图中显示的是:斜线以一定间隔略微向上/向下增加
我的问题是,

  • 对于上述每一类,可以推断出Perm Gen空间的这种行为是什么
  • 对于上述每一类,理想的行为应该是什么
这里的理想行为是指一种状态,它代表:

  • 应用程序的性能最好
  • 应用程序没有任何与内存相关的问题
  • 为了提高资源利用率,不需要对代码进行任何改进
上述问题也适用于堆空间分析

以下是补充澄清:

  • 确实,分析应该在与生产相同的环境中进行。但如果我能理解这里真正的目标是什么,这将非常有帮助。到目前为止,我也在努力学习。然后在将来,我会尝试在生产上做

  • 此外,我还试图比较两个代码库(一个重构代码库和一个旧代码库)。我想知道重构(作为定量数据)带来的好处的程度。我想如果我在同一个平台上记录结果,比较就会成立(无论是生产还是开发)

更新1:

  • 我还连续运行了8个多小时的应用程序
  • 我使用GCViewer:1.31获取GC信息
  • 我正在附加从GCViewer收集的数据
  • 我观察到,每30秒,就会发生一个完整的GC事件。这就得出结论,很多对象都是
    log living
  • 我需要进一步的信息。我真的不知道如何正确完整地解释这些细节
请看附件。请提供投入


有几点建议:

1) 沟JConsole。VisualVM包含在JDK中,并且在各个方面都具有优势(并且包括桥接模式,所以您甚至可以使用旧插件,如果这就是让您继续使用JConsole的全部原因的话)

2) 打开GC登录。您至少需要以下标志:

-Xloggc:(用于更全面的GC日志记录) -XX:+PrintGCDetails(用于更详细的输出) -XX:+PrintTenuringDistribution(显示JVM假定的使用期限阈值)

找到一个分析日志的工具——你需要注意对象的工作集以及PermGen,即使后者是你最关心的。GCViewer是免费的,或者有商业工具(完全公开-我为jClarity工作,jClarity为此制作了cenum工具)

3) 你需要跑一个多小时。许多应用程序在相当长的一段时间内不会稳定下来


4) 再看看你的数字,这看起来并不是一个不寻常的问题。为什么要调优JVM的这一部分?系统的哪个方面表明这是一个严重问题,需要解决?您是如何确定这一点的?这个问题是如何表现出来的?

您对这段代码的生产环境是什么?如果答案不是“Windows XP”,你就是在浪费时间。同意。确实,分析应该在与生产相同的环境中进行。但如果我能理解这里真正的目标是什么,这将非常有帮助。到目前为止,我也在努力学习。然后在将来,我将尝试在生产环境中使用它。我想补充一点,我正在尝试比较两个代码库(一个重构代码库和一个旧代码库)。我想知道将系数作为定量数据所带来的好处的程度。我认为,如果我在同一个平台上记录结果,比较就会成立(无论是生产还是开发)。评测也应该在开发端完成。内存行为受设置和平台的影响,这可能会产生灾难性的影响,这是真的。但是本地评测可能已经显示了哪些对象的寿命很长,更不用说速度瓶颈了。我遵循了你的指导方针。请看更新的问题。