2010-04-07 64 views
1

我的Java應用程序的功能是提供參考數據(基本上從XML文件加載大量數據到哈希映射),因此我們要求從這樣的數據hashmap基於一個id,我們有這樣的多個有不同的業務數據集的地圖。的問題是,當我試圖執行用於相同的請求多次Java應用程序,響應時間是不同的像31毫秒,過48ms 72ms的,120毫秒,63毫秒等因此存在最小和採取最大時間之間的相當大的差距執行完成。理想情況下,我希望響應時間是63ms,65ms,61ms,70ms,61ms,但在我的情況下,對於相同請求的響應時間的變化是巨大的。我曾使用過一個opensource配置文件來了解是否有任何額外的方法執行或內存泄漏,但根據我的理解,這沒有問題。請讓我知道可能是什麼原因,我該如何解決這個問題。響應時間是不同的多個執行的應用程序與相同的請求性能問題

回答

2

可能有多方面的原因:

  • 是您的Java應用程序重新啓動,每次運行?如果不是,那可能是垃圾收集器在不幸的時間裏踢了。如果是這樣,JVM啓動時間可能會導致變化。

  • 是其他任何機器上運行?

  • 磁盤緩存在某些情況下是「熱身」的,但在其他情況下卻不會?也就是說,是否最近訪問過這些文件,以便它們仍在內存中?

  • 如果這是一個聯網的應用程序,測量過程中是否有任何網絡活動?

  • 如果涉及遠程計算機(例如數據庫服務器或文件服務器),那麼上述方法是否也適用於該計算機?

使用一個分析器來找出哪一段代碼負責時間的變化。

0

如果不運行實時系統,那麼你就不能肯定這將在一定時間內執行。

操作系統不斷地做其他的事情,大多是日常任務,並提供系統等服務。這很容易使您的系統其他部分減速50ms。

也有可能是你需要等待IO的時間。如硬盤或網絡通信。

除此之外,還有一個事實,即您的JVM不做任何實時承諾。這可能意味着垃圾收集器貫穿始終。這對正常應用程序的影響非常小,但是如果您創建並忘記了很多對象(如加載大量或大型文件時可能會這樣做),則效果會很大。

最後它可以是你的算法(你是否每次運行相同的數據?)如果你有不同的數據,你可以有不同的執行時間。

相關問題