.Jar 在一台 PC 上比另一台使用更多 RAM
.Jar Uses More RAM On One PC Than Another
所以我有一个小问题。我有台式电脑和笔记本电脑。我正在开发一个音频播放器,我正在做一些性能测试,我注意到在桌面上,程序在 taskmanager 上以 59mb 的 RAM 运行,而在我的笔记本电脑上,它仅以 48MB 的 RAM 运行。我不知道这种差异从何而来,因为以下陈述是事实:
- 我在两台机器上安装了完全相同的 JRE/JDK 版本。
- 我的 PC 和笔记本电脑都是最新的 64 位 windows 8.1 机器
- 两个 .Jar 文件是相同的(我什至用我的笔记本电脑替换了我桌面上的一个)
- 在 Netbeans 本身中(再一次,两台机器具有相同的版本和设置)在我的桌面上它以 50mb 的速度运行,而在我的笔记本电脑上以 35mb 的 ram
当我使用 Launch4j 将程序包装在 .exe 文件中并使用捆绑的 java 路径(来自我的笔记本电脑的路径)时,也会发生同样的事情。同样,我的 PC 运行的 RAM 比我的笔记本电脑多得多。
有没有人知道这种巨大的性能差异从何而来?我不知所措,我正在尝试降低桌面的 RAM。
重要说明
我发现在使用 JFrame 制作非常基本的程序时也会发生这种情况。在我的笔记本电脑上,空框架仅使用 18mb 的 RAM,在我的电脑上它使用 28mb 的 RAM。我认为这就是差异的来源。但造成这种巨大性能差异的潜在原因是什么?
笔记本电脑规格
8GB 内存
英特尔 i5-5200U @2.2ghz
英特尔高清显卡 5500
规格电脑
8GB 内存
英特尔 i5-3470 @3.2ghz
NVIDIA gtx960
在由 os 分配的系统内存和 ram 以及特定任务的进程中。
processor负责分配一个multitasking和multiprocessing。你能在相同的处理器和不同的系统上检查相同的文件吗?
请检查处理器的两个系统配置。
根据 Java8 文档,默认的初始和最大堆大小取决于物理内存量。您 运行 与 Java 相同的版本、相同的 OS 和相同数量的 RAM,因此初始修复大小应该相同。
但是,在那之后 JVM 内部发生了一些事情,并且很可能存在显着差异。例如:
这两个系统可能有不同的屏幕尺寸和屏幕分辨率。这可能意味着应用程序的 JFrames 具有不同的尺寸(以像素为单位),因此占用不同的内存量。 (我猜你的 PC 屏幕比笔记本电脑大。)
显卡可能存在差异,导致各自的 JVM 选择不同的视频策略(加速或不加速)。这可能会导致堆内存和非堆内存使用的差异。
音频方面可能存在差异。
虽然(堆)内存使用的实际差异可能很小,但它们可能会被 GC 的堆大小调整算法放大。调整堆大小时,GC 将尝试将其增大很大百分比。如果堆 space 使用情况促使 PC JVM 比笔记本电脑 JVM 多调整一次堆大小,则实际堆使用情况的微小差异可能会导致相应堆大小的更大差异。
简而言之,我不能肯定地说出内存使用量差异如此之大的原因,但有多种可能的解释。
但我不担心这个。在具有 8 G 物理 RAM 的系统上,18 兆字节与 28 兆字节是 "small beer"。我们说的是每个系统物理内存的大约 0.125%。
所以我有一个小问题。我有台式电脑和笔记本电脑。我正在开发一个音频播放器,我正在做一些性能测试,我注意到在桌面上,程序在 taskmanager 上以 59mb 的 RAM 运行,而在我的笔记本电脑上,它仅以 48MB 的 RAM 运行。我不知道这种差异从何而来,因为以下陈述是事实:
- 我在两台机器上安装了完全相同的 JRE/JDK 版本。
- 我的 PC 和笔记本电脑都是最新的 64 位 windows 8.1 机器
- 两个 .Jar 文件是相同的(我什至用我的笔记本电脑替换了我桌面上的一个)
- 在 Netbeans 本身中(再一次,两台机器具有相同的版本和设置)在我的桌面上它以 50mb 的速度运行,而在我的笔记本电脑上以 35mb 的 ram
当我使用 Launch4j 将程序包装在 .exe 文件中并使用捆绑的 java 路径(来自我的笔记本电脑的路径)时,也会发生同样的事情。同样,我的 PC 运行的 RAM 比我的笔记本电脑多得多。
有没有人知道这种巨大的性能差异从何而来?我不知所措,我正在尝试降低桌面的 RAM。
重要说明 我发现在使用 JFrame 制作非常基本的程序时也会发生这种情况。在我的笔记本电脑上,空框架仅使用 18mb 的 RAM,在我的电脑上它使用 28mb 的 RAM。我认为这就是差异的来源。但造成这种巨大性能差异的潜在原因是什么?
笔记本电脑规格 8GB 内存 英特尔 i5-5200U @2.2ghz 英特尔高清显卡 5500
规格电脑 8GB 内存 英特尔 i5-3470 @3.2ghz NVIDIA gtx960
在由 os 分配的系统内存和 ram 以及特定任务的进程中。 processor负责分配一个multitasking和multiprocessing。你能在相同的处理器和不同的系统上检查相同的文件吗?
请检查处理器的两个系统配置。
根据 Java8 文档,默认的初始和最大堆大小取决于物理内存量。您 运行 与 Java 相同的版本、相同的 OS 和相同数量的 RAM,因此初始修复大小应该相同。
但是,在那之后 JVM 内部发生了一些事情,并且很可能存在显着差异。例如:
这两个系统可能有不同的屏幕尺寸和屏幕分辨率。这可能意味着应用程序的 JFrames 具有不同的尺寸(以像素为单位),因此占用不同的内存量。 (我猜你的 PC 屏幕比笔记本电脑大。)
显卡可能存在差异,导致各自的 JVM 选择不同的视频策略(加速或不加速)。这可能会导致堆内存和非堆内存使用的差异。
音频方面可能存在差异。
虽然(堆)内存使用的实际差异可能很小,但它们可能会被 GC 的堆大小调整算法放大。调整堆大小时,GC 将尝试将其增大很大百分比。如果堆 space 使用情况促使 PC JVM 比笔记本电脑 JVM 多调整一次堆大小,则实际堆使用情况的微小差异可能会导致相应堆大小的更大差异。
简而言之,我不能肯定地说出内存使用量差异如此之大的原因,但有多种可能的解释。
但我不担心这个。在具有 8 G 物理 RAM 的系统上,18 兆字节与 28 兆字节是 "small beer"。我们说的是每个系统物理内存的大约 0.125%。