我知道如何在Tomcat和Eclipse中设置Java堆大小。但我的问题是,为什么要这样做呢?当Java首次引入时,是否对初始堆设置了任意限制,以防止虚拟机增长到一定大小?看起来,由于今天大多数机器都有大量可用内存,我们不应该再需要处理这个问题。
谢谢,
汤姆
我知道如何在Tomcat和Eclipse中设置Java堆大小。但我的问题是,为什么要这样做呢?当Java首次引入时,是否对初始堆设置了任意限制,以防止虚拟机增长到一定大小?看起来,由于今天大多数机器都有大量可用内存,我们不应该再需要处理这个问题。
谢谢,
汤姆
-XX:+AggressiveHeap
。根据Sun公司的说法(链接):Java是一个跨平台系统。一些系统(如Unix及其衍生版本)有一个ulimit
命令,允许您限制进程使用的内存量。而其他系统则没有这个功能,同时Java有时会嵌入应用程序中,例如在Web浏览器中。您不希望一个破损的小程序导致您的桌面崩溃(好吧,这至少是这个想法,但小程序从来没有真正流行过,但这是另一种故事)。本质上,这个选项是沙箱的关键基石之一。
因此,VM开发人员需要一个便携式的解决方案:他们向VM添加了一个选项,允许任何人(用户、管理员、Web浏览器)控制VM可以分配的最大RAM量。Java的各种用途的需求太多样化了,无法使用同一种尺码适配所有情况。
当您考虑移动设备时,这变得更加重要。您的台式机可能拥有2-8GB RAM,但您的移动设备可能还要少得多。对于这些设备,您真的不希望一个糟糕的小程序导致设备崩溃,因为可能甚至没有用户可以检查。