在像 -Xms512G 这样的大情况下,JVM 会立即为堆获取整个 Xms space 吗?
Is JVM immediately grab whole the Xms space for heap in huge cases like -Xms512G?
除了关于巨大堆大小 GC 挑战的讨论之外,JVM 是否会立即抓取所有 -Xms512G
如果设置? ( 512G
只是象征着一个巨大的堆,如果有帮助,假设另一个巨大的价值)
开始好像很费时间吧?谁能从一开始就阐明 JVM 在这种情况下的行为?
-Xmx
怎么样?
编辑:我只想知道:-Xms512G
参数化程序在启动时是否有任何延迟针对同一程序但 -Xms512m 参数化
编辑 XX:+AlwaysPreTouch
对此有何影响?
-Xmx
和-Xms
有区别。 Xmx
保留虚拟内存(你有很多)。因此,例如一些这样的代码(Mac OSX
上的相同数字和 linux 的一些版本):
public class DeleteMe {
public static void main(String[] args) {
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
System.out.println("done");
}
}
运行 与 time java -Xmx5120g DeleteMe.java
和 time java -Xmx50 DeleteMe.java
显示几乎相同的时间。 保留 5120 GB
和 50MB
虚拟内存在时间上没有区别。
另一方面 -Xms
将此内存提交给进程,这更昂贵。所以运行宁:
time java -Xms5120g DeleteMe.java
显示大约 9 秒和 10 秒,而 :
time java -Xms50m DeleteMe.java
只显示大约一秒。
所以是的,这些电话有一些延迟。请求内存时是否可以超过物理 RAM
,取决于 linux
的 vm.overcommit_memory
标志。不过,我不知道在 Windows 上是什么设置控制了这个。
用 -Xms512g
和 -Xms512m
测试你的确切场景,仍然显示至少 1 second
时间延迟。如评论中所述,还值得一提 -XX:+AlwaysPreTouch
标志。它会预触摸所有 committed 内存,所以直到 -Xms
,这显然意味着有了这样的标志和 -Xms
的大尺寸(只要你有那么多物理内存),启动会慢很多。
除了关于巨大堆大小 GC 挑战的讨论之外,JVM 是否会立即抓取所有 -Xms512G
如果设置? ( 512G
只是象征着一个巨大的堆,如果有帮助,假设另一个巨大的价值)
开始好像很费时间吧?谁能从一开始就阐明 JVM 在这种情况下的行为?
-Xmx
怎么样?
编辑:我只想知道:-Xms512G
参数化程序在启动时是否有任何延迟针对同一程序但 -Xms512m 参数化
编辑 XX:+AlwaysPreTouch
对此有何影响?
-Xmx
和-Xms
有区别。 Xmx
保留虚拟内存(你有很多)。因此,例如一些这样的代码(Mac OSX
上的相同数字和 linux 的一些版本):
public class DeleteMe {
public static void main(String[] args) {
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
System.out.println("done");
}
}
运行 与 time java -Xmx5120g DeleteMe.java
和 time java -Xmx50 DeleteMe.java
显示几乎相同的时间。 保留 5120 GB
和 50MB
虚拟内存在时间上没有区别。
另一方面 -Xms
将此内存提交给进程,这更昂贵。所以运行宁:
time java -Xms5120g DeleteMe.java
显示大约 9 秒和 10 秒,而 :
time java -Xms50m DeleteMe.java
只显示大约一秒。
所以是的,这些电话有一些延迟。请求内存时是否可以超过物理 RAM
,取决于 linux
的 vm.overcommit_memory
标志。不过,我不知道在 Windows 上是什么设置控制了这个。
用 -Xms512g
和 -Xms512m
测试你的确切场景,仍然显示至少 1 second
时间延迟。如评论中所述,还值得一提 -XX:+AlwaysPreTouch
标志。它会预触摸所有 committed 内存,所以直到 -Xms
,这显然意味着有了这样的标志和 -Xms
的大尺寸(只要你有那么多物理内存),启动会慢很多。