在Windows 64中javaw.exe进程消耗更多内存吗?

时间:2012-12-17 10:41:59

标签: java windows eclipse jvm 64-bit

我从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 Ram?!

将来我会遇到任何问题吗?

2 个答案:

答案 0 :(得分:6)

64位版本将使用-server JVM,它具有更高的默认最大堆大小。 Windows 32位版本默认使用-client JVM,默认情况下使用较少的资源,因为它设计为在较小的计算机上运行,​​因此对于长时间运行的程序而言往往较慢(客户端JVM速度更快)为小程序等短期运行程序加载

如果设置了最大堆大小,如果你有最新版本的Java 6或Java 7,它们应该使用大约相同的内存量。

答案 1 :(得分:2)

Runtime.maxMemory()

  

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

这是一个上限。这并不意味着JVM预先分配了这个内存。当您创建对象并保持它们时,您的进程的内存使用量将会增加,直到您可以配置的最大堆大小。

  

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

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

  

我从Windows 7(32位)转到Windows 7(64位)

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