5

我从 Windows 7(32 位)切换到 Windows 7(64 位),因为我在 2 GB 中添加了 4 Gb RAM。现在当我跑步时Eclipse Juno EE。在 Windows 任务管理器中,我看到该进程javaw.exe正在消耗大约 380 Mb 的 RAM,我以前没有看到过,当我使用 32 位操作系统时。我什至没有尝试午餐任何项目。我写了这段代码:

public static void main(String[] args) {
    Runtime runtime = Runtime.getRuntime(); 
    System.out.println(runtime.maxMemory());
}

这表明对于我的JVM is allocated 1 338 507 264 bytes.

这意味着当我运行项目时,这个过程可能会消耗高达 1.3 Gb 的内存?!

将来我会对此有任何问题吗?

4

2 回答 2

6

64 位版本将使用-serverJVM,并且它具有更高的默认最大堆大小。Windows 32 位版本默认使用-clientJVM,默认情况下它使用较少的资源,因为它设计为在较小的机器上运行,因此对于长时间运行的程序来说往往更慢(客户端 JVM 对短期运行的程序有更快的负载像小程序)

如果您设置了最大堆大小,那么如果您使用的是 Java 6 或 Java 7 的最新版本,它们应该使用大致相同的内存量。

于 2012-12-17T10:44:42.463 回答
2

Runtime.maxMemory()

返回Java 虚拟机将尝试使用的最大内存量。

这是一个上限。这并不意味着 JVM 预先分配了这么多内存。您的进程的内存使用量将随着您创建对象并保留它们而增长,直至您可以配置的最大堆大小。

在 Windows 任务管理器中,我看到进程 javaw.exe 正在消耗 ~380 Mb RAM

内存使用有很多方面:地址空间、虚拟 RAM、物理 RAM 等。根据您在任务管理器中查看的列,您在其中看到的数字可能具有多种不同含义之一。

我从 Windows 7(32 位)切换到 Windows 7(64 位)

一般来说,64 位代码确实比等效的 32 位代码需要更多的内存。一方面,指针更宽,因此占用更多空间。这适用于 JVM,就像它适用于任何其他进程一样。然而,JVM 采取了一些措施来减轻影响。一种这样的措施是CompressedOops

于 2012-12-17T10:45:06.507 回答