2016-06-07 44 views
0

所以我有一個小問題。我有我的臺式電腦和我的筆記本電腦。我正在開發一款音頻播放器,並且正在做一些性能測試,並且我注意到在桌面上,該程序在taskmanager上運行的內存爲59mb,而在我的筆記本電腦上運行時只有48MB的RAM。我不知道這種差異來自哪裏,因爲以下陳述是事實:.Jar在一臺PC上使用更多的RAM比另一臺

  1. 我在兩臺機器上都安裝了完全相同的JRE/JDK版本。
  2. 我的兩個PC和筆記本電腦的64位上最新的是Windows 8.1的機器
  3. 這兩個.jar文件是相同的(我甚至替換一個我的桌面上有我的筆記本電腦一)
  4. 在NetBeans本身我的桌面上(再次,這兩臺計算機具有相同的版本和設置),它運行在50MB,並且在我的筆記本電腦在RAM 35MB的時候我在Launch4j一個.exe文件包程序

同樣的事情發生並使用捆綁的java路徑(來自我的筆記本電腦)。我的個人電腦再次運行的內存比我的筆記本電腦多。

有沒有人可能有一個想法,這種巨大的性能差異來自哪裏?我很茫然,我正試圖讓桌面的內存也降低。

重要注意事項 我想這也發生在使用JFrame製作非常基本的程序時。在我的筆記本電腦上,空框只用了18mb的RAM,在我的電腦上它使用了28MB的RAM。我認爲這是差距的來源。但是,這種性能差異的潛在原因是什麼?

規格的筆記本電腦 8GB RAM 英特爾i5-5200U @ 2.2GHz的 英特爾高清顯卡5500

規格PC 8GB RAM 英特爾i5-3470 @ 3.2GHz的NVIDIA gtx960

+0

臺式機和筆記本電腦有不同數量的總RAM嗎?如果可用內存的總量較大,JVM可能會分配更多的內存。 – Jesper

+0

@Jesper都有8GB的RAM。我將在主要文章中發佈完整規範。 – ImJustACowLol

+0

英特爾圖形使用主內存。 Nvidea沒有。 –

回答

1

根據Java 8文檔,默認的初始和最大堆大小取決於物理內存量。您正在運行相同版本的Java,相同的操作系統和相同數量的RAM,因此初始治療尺寸應該相同。

但是,之後的事情發生在JVM中,並且有可能存在顯着差異。例如:

  • 這兩個系統可能有不同的屏幕尺寸和屏幕分辨率。這可能意味着應用程序的JFrame具有不同的維度(以像素爲單位),因此佔用不同的內存量。 (我猜你在PC上的屏幕比你的筆記本電腦大一些。)

  • 顯卡可能存在差異,導致各個JVM選擇不同的視頻策略(加速或不加速)。這可能會導致堆和非堆內存使用情況的差異。

  • 音頻端可能存在差異。

儘管(堆)內存使用量的實際差異可能很小,但它們可能會被GC的堆大小調整算法放大。在調整堆的大小時,GC會嘗試將其增長很多。如果堆空間使用率推動PC JVM調整堆大小再比Laptop JVM多一倍,那麼實際堆使用率的小差異可能會導致相應堆大小的差異更大。


總之,我不能確定地說爲什麼在內存使用方面存在如此大的差異,但有一些可能的解釋。

但我不擔心這一點。 18M字節與28M字節是8個GIGABYTES物理內存的系統中的「小啤酒」。我們正在談論每個系統物理內存的大約0.125%。

+0

兩臺機器上的JFrame本身的分辨率都是640x360,所以它可能不是來自那裏的。你的第二點對我來說很可行,很可能由於顯卡的不同,JVM選擇不同的策略。 – ImJustACowLol

0

在系統內存和ram分配os和特定任務的進程。處理器負責分配多任務和多處理。你可以在相同的處理器和不同的系統上檢查相同的文件

請檢查您的處理器的兩個系統配置。

+0

我很難用沒有與我的臺式機或筆記本電腦相同的處理器的不同系統。還有其他方法嗎? – ImJustACowLol

相關問題