前言
一直在做批量測試工具的研發,所謂批量,那麼資料量不言而喻了。
什麼級別呢,目前本程式就個人測試而言,2199W資料暫時沒問題,一次性寫入大約九分鐘左右。
遇到的問題
都是因資料量大,讀或寫操作,遇到的瓶頸,一言不合就記憶體溢位,也就是常見的這個:java.lang.OutOfMemoryError: Java heap space。
經驗而言,肯定會修改IDEA執行引數,即電腦支援最大記憶體了,如:-Xms8092m -Xms8092m。
可能有的同學會說了,直接讓他在IDE上跑,設定執行jvm引數就好了呀。
試想,如果要給別人使用,肯定要脫離IDE,打包成可執行程式的,才更具易用性。
不能直接讓人家在IDE上跑吧,那還是工具嘛,o(╯□╰)o
嘗試過程
再來看打包工具jvm引數設定頁面,如下:
按照網上很多的說法就是,加大jvm記憶體設定即可,但將設定jvm引數加入打包中,還是第一次嘗試。
這樣做的好處是什麼?
當執行這個jar包程式,就不需要指定執行引數了。
解決方案
1、-J-Xmx512m
參考“Allow VM。。。”那一行寫的,設定為 -J-Xmx512m至-J-Xmx8192m,一跑還是記憶體溢位,明顯這個方法無效,直接廢棄掉。
2、-XX:PermSize=512M -XX:MaxPermSize=1024M
參考MyEclipse中設定VM的方式,設定成-XX:PermSize=512M 至 -XX:MaxPermSize=8192M,再一跑,還是一樣記憶體溢位,一樣的,這個方法也廢棄掉。
3、新增配置檔案
- 清空上圖中文字框中的資料,勾選“Allow VM ....”的核取方塊;
- 假設打成的可執行程式名稱為run.exe,在它的同級目錄下新建檔案run.exe.vmoptions;
- run.exe.vmoptions檔案的內容為:
-Xms4096m
-Xmx8192m
- 重啟exe執行程式。
最後
再次執行打包程式,就正常了,且穩定奔放,沒有再報錯,問題解決。