題目其實(shí)取大了……
背景:線上環(huán)境java服務(wù)報(bào)錯(cuò),異常如題out of memory :Heap space
環(huán)境:32位 jdk 1.8
以下所說的解決方案,都是嘗試過的一些手段,我對(duì)jvm只是知道一些皮毛,所以無法深入分析,各位看官且當(dāng)病急亂投醫(yī)時(shí)的一個(gè)參考吧。
(1) 定位到拋異常的代碼段,把可疑對(duì)象用完后顯示置為null,想著這樣能盡快讓該對(duì)象被GC回收
(2) 增加堆內(nèi)存設(shè)置,-xms和-xmx
(3) 這個(gè)就是今天要提到的了。。。JIT server模式設(shè)置
JIT(Just In Time,即時(shí)編譯技術(shù))是指當(dāng)jvm運(yùn)行程序時(shí),會(huì)把翻譯過的機(jī)器碼保存起來,以備下次使用。
它有兩種模式,server mode和client mode
server mode 下,java程序啟動(dòng)較慢,程序運(yùn)行過程中,jvm會(huì)做很多性能提升的操作,適合性能較好的服務(wù)器。新生代gc方式是并行,老生代gc方式是并發(fā)。
client mode下,java程序啟動(dòng)較快,適合輕量級(jí)客戶端,新生代,老生代的gc方式都是串行。
設(shè)置方式
64位的jdk只能使用server mode,32位jdk默認(rèn)是client mode,如果要換成server mode,需要做以下步驟:
-
打開C:\Program Files (x86)\Java\jre1.8.0_121\lib\i386\jvm.cfg文件,將-server KNOWN放于-client KNOWN之上,如下
jvmcfg.png -
把jdk下面的jre里的server文件夾拷貝到j(luò)re的bin目錄下
拷貝server文件夾.png
此次通過方案3,莫名解決了堆內(nèi)存溢出問題。。。程序員總是莫名解決各種bug,哈哈
等我回頭研究下jvm,再補(bǔ)充補(bǔ)充o( ̄︶ ̄)o

