九、元空間

元空間是永久代的替代品

從JDK1.8開始正式取消了永久代之後,取而代之的就是元空間(MetaSpace),所謂的元空間的本質指的是本機物理內存,其作用和永久代相同。不過元空間和永久代有很大的區別:元空間用的是物理內存(受到本機的物理內存的限制),而永久代是JVM的內存空間,本身受到JVM的限制。兩者作用是一樣的,都是保存那些基本上不會被清空的操作的,比如字符串常量池。

元空間的調整參數

元空間內存調整參數

  1. -XX:MetaspaceSize 設置元空間的初始大小
  2. -XX:MaxMetaspaceSize 設置元空間的最大容量,默認是沒有限制的(受本機物理內存限制)
  3. -XX:MinMetaspaceFreeRatio 執行GC之後,最小的剩餘元空間百分比,合理的值可以減少爲分配空間導致的垃圾收集
  4. -XX:MaxMetaspaceFreeRatio 執行GC之後,最大的Metaspace剩餘空間容量的百分比,合理的值可以減少爲釋放空間導致的垃圾收集

如果元空間內存不夠,會報“OutOfMemoryError:Metaspzace”。

有一個關於OOM的面試題:請問是否知道什麼叫OOM?怎麼會出現?

OutOfMemoryError指的是內存溢出問題,內存的溢出需要考慮以下的情況:
	|- Java堆內存溢出(Java head space):往往出現在Full GC失敗之後;
	|- 永久代(PermGen space):分配的內存不足,或者數據量高於內存;
	|- 元空間(Metaspace):分配的物理內存不足,或者數據量高於物理內存。
發佈了63 篇原創文章 · 獲贊 16 · 訪問量 4892
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章