有谁知道用于websphere的prefferedheapbase参数是什么? tomcat有没有类似的参数?
我可以从IBM Website找到的东西。
-Xgc:preferredHeapBase = 0x100000000
这将找到从4GB标记开始的Java堆,从而为其他进程留下较低的4GB。
我们可以在tomcat中设置这个参数吗?
答案 0 :(得分:2)
这不是应用程序服务器设置,而是IBM JVM设置。它对在IBM JVM上运行的任何进程(包括tomcat)具有相同的效果。
就使用而言,对于一些非Java堆分配来说,显然重要的是地址低于32位。通过将java堆放得更高,它允许稍后的分配在32位线下发生。线程创建使用的内存就是一个例子。
在32位行之上创建整个堆的缺点是"压缩引用" IBM 64位JVM的功能效率不高。
答案 1 :(得分:0)
在IBM 64位JVM中,使用称为compressedrefs的概念,同时使用堆大小<25GB。原因是:
此设置有助于在内存占用和内存访问时间方面提高JVM性能。但是,这有一个缺点。由于4GB以下内存充满了Java堆,类 - 线程监视器和OS库,如果4GB内存耗尽且堆不能再增长,JVM会在尝试为内存分配内存时抛出内存异常一个对象。
要缓解此问题,请使用-Xgc:preferredHeapBase = 0x100000000选项。这指示JVM以0x100000000(4GB)开始堆基 - 并且堆从4GB内存标记及以上增长。这为堆增长提供了足够的空间。类,线程和监视器仍然低于4 GB,因此它们仍然可以利用使用compressedrefs的性能改进。
有关compressedrefs实现的详细说明,请参阅此文档:
ftp://public.dhe.ibm.com/software/webserver/appserv/was/WAS_V7_64-bit_performance.pdf
这是一个特定于JVM的选项,可以为JVM上运行的任何应用程序设置。