回覆列表
  • 1 # 此生唯一

    JVM中的記憶體和計算機的記憶體不是一回事,JVM(JAVA虛擬機器)只是執行在伺服器中的一個程序,只佔用一部分的記憶體,其中堆通常佔了整個jvm記憶體的80%!

    假設一下,計算機是8G記憶體只給jvm分配了4G記憶體,jvm佔用了4G記憶體之後,雖然整個記憶體才使用50%(忽略其他的),jvm也將發生記憶體溢位!

    jvm記憶體溢位有哪些可能情況呢?

    ①,堆溢位:堆用來儲存例項物件!

    可能原因一:設定的最大堆記憶體太小!解決方案:透過設定-Xmx調大最大堆記憶體!

    可能原因二:迴圈建立物件導致物件來不及回收!解決方案:最佳化程式碼!

    ②,棧溢位:棧主要用來存放物件引用!

    可能原因:遞迴呼叫方法等容易出現棧溢位!

    解決方法:最佳化程式碼!

    通常不會溢位,使用-XX:Permsize設定合適的永久代!

    發現記憶體溢位之後,可使用jstamp,MAT JAVA等進行記憶體分析

    一直在持續分享JAVA方面的技術,有需要的朋友敬請關注。。

  • 中秋節和大豐收的關聯?
  • 《活色生香》劇情介紹?