2016-06-07 55 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

相关问题