題目其實取大了……
背景:線上環(huán)境java服務(wù)報錯纳令,異常如題out of memory :Heap space
環(huán)境:32位 jdk 1.8
以下所說的解決方案彬呻,都是嘗試過的一些手段宿礁,我對jvm只是知道一些皮毛钉寝,所以無法深入分析,各位看官且當病急亂投醫(yī)時的一個參考吧管引。
(1) 定位到拋異常的代碼段士败,把可疑對象用完后顯示置為null,想著這樣能盡快讓該對象被GC回收
(2) 增加堆內(nèi)存設(shè)置汉匙,-xms和-xmx
(3) 這個就是今天要提到的了拱烁。。噩翠。JIT server模式設(shè)置
JIT(Just In Time戏自,即時編譯技術(shù))是指當jvm運行程序時,會把翻譯過的機器碼保存起來伤锚,以備下次使用擅笔。
它有兩種模式,server mode和client mode
server mode 下屯援,java程序啟動較慢猛们,程序運行過程中,jvm會做很多性能提升的操作狞洋,適合性能較好的服務(wù)器弯淘。新生代gc方式是并行,老生代gc方式是并發(fā)吉懊。
client mode下庐橙,java程序啟動較快,適合輕量級客戶端借嗽,新生代态鳖,老生代的gc方式都是串行。
設(shè)置方式
64位的jdk只能使用server mode恶导,32位jdk默認是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包蓝,再補充補充o( ̄︶ ̄)o