原因一:因為直接內(nèi)存,JVM將會在IO操作上具有更高的性能,因為它直接作用于本地系統(tǒng)的IO操作。而非直接內(nèi)存,也就是堆內(nèi)存中的數(shù)據(jù),如果要作IO操作,會先復(fù)制到直接內(nèi)存,再利用本地IO處理。
原因二:整個永久代有一個 JVM 本身設(shè)置固定大小上線,無法進(jìn)行調(diào)整,而元空間使用的是直接內(nèi)存,受本機可用內(nèi)存的限制,并且永遠(yuǎn)不會得到j(luò)ava.lang.OutOfMemoryError。
-XX:MaxMetaspaceSize
標(biāo)志設(shè)置最大元空間大小,默認(rèn)值為 unlimited,這意味著它只受系統(tǒng)內(nèi)存的限制。-XX:MetaspaceSize
調(diào)整標(biāo)志定義元空間的初始大小如果未指定此標(biāo)志,則 Metaspace 將根據(jù)運行時的應(yīng)用程序需求動態(tài)地重新調(diào)整大小。