Java—为什么响应时间会随着时间的推移而增加?

Java—为什么响应时间会随着时间的推移而增加?,java,performance,optimization,garbage-collection,jvm,Java,Performance,Optimization,Garbage Collection,Jvm,我在EclipseIndigo中执行了10000次Java程序。执行的所有操作都在内存中;没有磁盘IO或网络IO。我注意到,在一段时间内,对于相同的输入,响应时间从2毫秒增加到25毫秒。绘制响应时间后,图形看起来是线性的。第一个想法是我没有调整垃圾收集器。我已经为最大吞吐量和更少的gc暂停时间设置了垃圾收集器。还是没有区别 有关响应时间和Java VM GC的屏幕截图 我正在MacBookPro 2011上运行Oracle Java java version "1.6.0_29" Java(TM

我在EclipseIndigo中执行了10000次Java程序。执行的所有操作都在内存中;没有磁盘IO或网络IO。我注意到,在一段时间内,对于相同的输入,响应时间从2毫秒增加到25毫秒。绘制响应时间后,图形看起来是线性的。第一个想法是我没有调整垃圾收集器。我已经为最大吞吐量和更少的gc暂停时间设置了垃圾收集器。还是没有区别

有关响应时间和Java VM GC的屏幕截图

我正在MacBookPro 2011上运行Oracle Java

java version "1.6.0_29" Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11M3527) Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode) java版本“1.6.0_29” Java(TM)SE运行时环境(构建1.6.0_29-b11-402-11M3527) Java HotSpot(TM)64位服务器虚拟机(构建20.4-b02-402,混合模式) 以下是我的虚拟机设置

-server -XX:+UseParallelGC -XX:+UseParallelOldGC -Xms48m -Xmx64m -XX:NewSize=32m -XX:MaxNewSize=32m -Xss2048k -XX:SurvivorRatio=16 -XX:MaxGCPauseMillis=15 -verbose:gc -Xloggc:gclog.txt -XX:+PrintGCDetails -服务器-XX:+UseParallelGC-XX:+UseParallelOldGC-Xms48m-Xmx64m-XX:NewSize=32m-XX:MaxNewSize=32m-Xss2048k-XX:SurviorRatio=16-XX:MaxGCPausEmilis=15-verbose:gc-Xloggc:gclog.txt-XX:+PrintGCDetails 如果有人能说明这一点,我将不胜感激。

你可以说明这一点。。。通过简单地分析您的应用程序:

请告诉我们您发现了什么:)

您可以解释一下。。。通过简单地分析您的应用程序:


请告诉我们您的发现:)

根据您告诉我们的情况,很难说问题出在哪里

  • 这可能是应用程序本身的问题

  • 您启动应用程序的方式可能会出现问题

  • 这可能是您测量“响应时间”的方式中的一个问题


如果您想要一个更好的答案,您需要解释如何“在EclipseIndigo中执行Java程序10000次”

  • 如何/在何处测量响应时间?日食?还有别的原因吗
  • 这真的意味着您要运行Eclipse启动器10000次吗
  • 或者您正在运行某个启动应用程序的基准测试框架类
  • 或者只是调用应用程序的
    main
    10000次
  • Eclipse是在单独的JVM中运行测试,还是在Eclipse JVM中运行测试
此外:

  • 当您说没有网络I/O时,是否包括127.0.0.x和本地IPC
  • 应用程序实际上在做什么?它是在以某种形式或形式与其他事物交谈吗

根据您告诉我们的情况,很难说问题出在哪里

  • 这可能是应用程序本身的问题

  • 您启动应用程序的方式可能会出现问题

  • 这可能是您测量“响应时间”的方式中的一个问题


如果您想要一个更好的答案,您需要解释如何“在EclipseIndigo中执行Java程序10000次”

  • 如何/在何处测量响应时间?日食?还有别的原因吗
  • 这真的意味着您要运行Eclipse启动器10000次吗
  • 或者您正在运行某个启动应用程序的基准测试框架类
  • 或者只是调用应用程序的
    main
    10000次
  • Eclipse是在单独的JVM中运行测试,还是在Eclipse JVM中运行测试
此外:

  • 当您说没有网络I/O时,是否包括127.0.0.x和本地IPC
  • 应用程序实际上在做什么?它是在以某种形式或形式与其他事物交谈吗

我使用Jprobe分析了应用程序,但什么也没找到。该程序是一个执行10000次的单线程应用程序。与并发相关的问题不应导致该问题。我已经在上发布了GC性能详细信息。有几件事“评测”可以为您做。其中之一是确定“热点”:哪些模块最常被调用?哪些模块占用的时间最长?这些模块使用哪些数据结构?共享?我使用Jprobe分析了应用程序,但没有发现任何内容。该程序是一个执行10000次的单线程应用程序。与并发相关的问题不应导致该问题。我已经在上发布了GC性能详细信息。有几件事“评测”可以为您做。其中之一是确定“热点”:哪些模块最常被调用?哪些模块占用的时间最长?这些模块使用哪些数据结构?共享?这可能与你电脑上的任何其他进程都缺乏CPU周期有关吗?谢谢Eric的建议。这是一个应用程序问题。这可能与你电脑上的任何其他进程都缺乏CPU周期有关吗?谢谢Eric的建议。这是一个申请问题。谢谢斯蒂芬。您提供的第一个提示本身就解决了问题。这是一个应用程序问题。我正在修改一个列表,我没有注意到。谢谢Stephen。您提供的第一个提示本身就解决了问题。这是一个应用程序问题。我正在修改一个列表,但我没有注意到。