这几天,发现项目在64位JDK下启动,一切正常,但是换到32位的JDK下之后,启动出现java.lang.StackOverflowError异常。
关于java.lang.StackOverflowError异常,一般情况下是代码写的有问题,出现了死循环或深层次的递归调用,导致内存溢出。
但是我们的项目,除在64位JDK下正常外,部署在公司的服务器上,使用中也一切良好,因此基本排除这个可能。那么就应该是32位和64位的JDK本身的区别,导致了项目运行内存不够从而抛出异常。
根本原因,应该是项目太过庞大,纵观我们的项目,maven管理的主项目和模块项目粗略数了下,竟然达到了50个之多,在这之前已经对JVM的各项参数内存进行了加大配置,不然无法运行,配置如下:
-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m
该配置在64位的JDK下运行一切正常,但是换到32位之下后,出现上面所说的问题,加大上面配置的各项内存后,发现问题依旧。
对比32位和64位JDK的各项默认参数配置,发现线程的默认堆栈大小32位JVM,默认堆栈最大是320k 而64位JVM是1024K,看来网上所说JDK 5.0之后已经默认为1M是针对64位而言,将32位JDK的线程堆栈加大,问题解决。
配置如下,添加了-Xss1024k:
-Xms512m -Xmx1024m -Xss1024k -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m
这只是权宜之计,关键所在还是项目规划要做好啊!!
相关推荐
jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk...
Windows下64位 JDK1.8版本 Windows下64位 JDK1.8版本 Windows下64位 JDK1.8版本
jdk1.8 32位 jdk1.8 32位 jdk1.8 32位
使用于32位window系统,稳定的jdk7,使用于32位window系统,稳定的jdk7,使用于32位window系统,稳定的jdk7,使用于32位window系统,稳定的jdk7,
64位jdk、32位jdk安装包
java windows版本64位JDK ,java windows版本64位JDK ,java windows版本64位JDK
windows 64位 jdk1.7 windows 64位 jdk1.7 windows 64位 jdk1.7
64位 jdk1.8 免费下载 貌似最少设为1分!
jdk 1.6 64位 windows 系统下安装包,测试过了,能够正常安装
JDK1.8 window版64位安装包 资源分享,欢迎下载使用并留言问题。
jdk1.8,32位和64位版本,jdk1.8.0_131
64位 JDK 6 你可以放在eclipse下就可以让64位的eclipse运行,而不跟原来系统32位的冲突
windows64位jdk6、jdk7、jdk8安装包
欢迎下载64位JDK 7 0
该资源中包含 jdk 1.6 32位系统 和 64位系统两个文件,希望能够为开发者提供帮助
32位jdk1.6_69安装包,windows版32位jdk安装包,欢迎下载
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率...
JDK 1.6.45 64位 JDK 1.6.45 64位JDK 1.6.45 64位JDK 1.6.45 64位
64位JDK_1.7.0_x64bit