我从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?!
将来我会遇到任何问题吗?
答案 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。