您可以使用-Xmx选项控制java中的最大堆大小.
我们正在使用此开关在Windows上遇到一些奇怪的行为.我们运行一些非常强大的服务器(想想196gb内存).Windows版本是Windows Server 2008R2
Java版本是1.6.0_18,64位(显然).
无论如何,我们遇到了一些奇怪的错误,其中进程因内存不足而退出,即使进程使用的内存少于-Xmx设置指定的内存.
所以我们编写了一个简单的程序,每次按下回车键就会分配一个1GB的字节数组,并将字节数组初始化为随机值(以防止任何内存压缩等).
基本上,最新的情况是,如果我们使用-Xmx35000m(大约35 gb)运行程序,当我们达到25 GB的进程空间(使用Windows任务管理器进行测量)时,我们会遇到内存不足的异常.我们在分配了24 GB的1 GB块(BTW)后点击这个,以便检出.
只需为-Xmx选项指定一个更大的值就可以使程序适用于更大量的ram.
那么发生了什么?是-Xmx只是"关闭".BTW:我们需要指定-Xmx55000m才能获得35 GB的进程空间......
关于发生了什么的任何想法?
他们是Windows JVM中的错误吗?
简单地将-Xmx选项设置得更大是否安全,即使-Xmx选项与进程明智之间存在脱节也是如此?
我们有一个很大的java代码库[~1 M行].
在代码库中埋藏(某处)是我们要删除的一些旧的System.out调试输出(它的混乱).
问题是:out代码库太大,我们无法轻易找到输出的来源.我们想要的是一种方法来查看调用System.out.println的位置(如异常或其他类似的堆栈跟踪).
它不适合调试 - 错误的输出来自某个错误的线程等.
有关如何跟踪此错误输出源的任何想法?
PS:对System.out的99.99%的调用是合法的,我们有成千上万的调用,所以只需在代码库中搜索System.out调用就不是解决办法!