切換
舊版
前往
大廳
主題

【補充】建立工作環境記憶體不足閃退

格子@懷念光牧的社畜 | 2016-04-18 01:16:03 | 巴幣 14 | 人氣 693

第二篇,原文


有巴友反應,無論如何都沒辦法解決的問題,
所以今天來提供相關的解決辦法噢!

請注意:
配備不足的狀況之下,更改預設設定運行,
代價就是時間,請確保在充裕的時間下執行以下操作。
(我就執行了31分鐘
有興趣的朋友,我會解釋一下為什麼這樣就可以解決這個問題,
稍微帶入一點點Java的運作原理。

狀況gradlew setDecompWorkspace失敗,原因為記憶體不足。關鍵字:


解決辦法
(1)一樣進入安裝Forge Mdk的資料夾找到gradlew.bat檔案。右鍵編輯它。

(2)複製  →  -Xms1G -Xmx1G
找到  →  set DEFAULT_JVM_OPTS=
這一行然後貼上在後方。
儲存之後,先最小化就可以,待會還要改回來。

(3)打開小黑盒,重複上次步驟先移動到Forge Mdk資料夾。
打上指令  →  gradlew setupDecompWorkspace
並且執行。

(4)依舊會卡在56%,但是請耐心等待。
此時系統正在把Minecraft進行反編譯。在這裡我有附上我的記憶體資訊,如圖所示,足足飛升到了1.73GB。
這個時候的狀態,我是有開著通訊軟體跟Chrome的三個分頁左右。

(5)經過漫漫的等待。會在某一個奇異點(宇宙大爆炸),瞬間飛升到73%左右,
這時系統正在編譯Minecraft。

(6)最後完成。    ↑    請看看它整整執行了31分鐘又57秒!
所以這就是傳說中的等價交換、右手換機器人的煉金術!

(7)接著別忘了執行下一個指令。
複製  →  gradlew eclipse
並且執行。

(8)收穫豐收的果實。

(9)最後一步別忘了,把剛剛縮小的記事本打開來,
把我們貼上的那一行拿掉,並且儲存。
做到這裡,各位就完成了環境的建置囉!


深入解釋
這邊針對這個狀況做點小解釋,有興趣的朋友可以看一下,
有點深入,所以沒興趣也沒關係,趕緊投入你製作模組的志業吧!

所謂的Heap Space,是屬於java.lang.OutOfMemoryError裏頭的一個Exception(例外),
它擲出的訊息為Java Heap Sapce,告訴我們Java當中,Heap用途的空間不足。
而Heap這個Space所存放的東西,是不可預期生命週期的資訊,
簡單來講就是動態產生的資料。
Heap Space不足在這裡發生的話,就會可能導致系統沒有辦法在指定的周期內完成工作。
這些工作可能要產生一點資料放進去Space裡面,但是又沒有空間可以放進去的話,
它就會被延宕、甚至是放棄。也就是常見的LAG、無回應。
因為如果不去適度的停頓,讓空間產生喘息、釋放,
嚴重一點,可能會導致整台電腦的記憶體被消耗殆盡,進而Shutdown。

實際上,我們的電腦很聰明,並不會做出這種吃光自己資源的蠢事,
所以在沒有明文規定的設定下,系統預設會規定Heap Space的大小,
當可使用的Heap Space的空間,低於這個大小一定的百分比(2%),
整個JVM的系統就會放棄掉整項工作,接著回報Heap Space不足。

預設的Heap Space大小最小值為實體記憶體的1 / 64、最大值為實體記憶體的1 / 4,
所以以我的電腦為例子,安裝了兩條1G的記憶體總共為2G,
Heap Space的大小為 Maximum:512MB、Minimum:32MB,
假設當時系統配給JVM的Heap Space剛好為最大值512MB,
當執行到剩下的Heap Space只剩下10.24MB(2%)的時候,就會爆炸啦!
但是其實系統不會那麼剛好就分給你512MB使用,搞不好才給你32MB  XDDDD"

解決辦法就是去強制設定分配的Heap Space,設定為最大值1G、最小值也是1G,
這時候系統就會去榨給JVM系統1G的記憶體使用,死榨活榨都會榨出1G,
除非你太貪心設定2G,這個時候系統會不理你,直接把你踢掉,
因為它榨不出2G通通給JVM使用

以上就是今天的教學,累死了。
如果有任何的錯誤,都歡迎更正噢!

創作回應

相關創作

更多創作