webLogic記憶體溢位解決方案
初次接觸weblogic便被它強大的功能所折服。
關於如何安裝和配置weblogic度娘上有很多的介紹,這裡就不再贅述了。
可以參考以下連結:
http://blog.csdn.net/hackage4619/article/details/55189106
--------------------------------------------------------------------------------------------------常見的記憶體溢位介紹----------------------------------------------------------------------------------------------------------
導致OutOfMemoryError異常的常見原因有以下幾種:
1. 記憶體中載入的資料量過於龐大,如一次從資料庫取出過多資料;
2. 集合類中有對物件的引用,使用完後未清空,使得JVM不能回收;
3. 程式碼中存在死迴圈或迴圈產生過多重複的物件實體;
4. 使用的第三方軟體中的BUG;
5. 啟動引數記憶體值設定的過小;
此錯誤常見的錯誤提示:
1. tomcat:java.lang.OutOfMemoryError: PermGen space
2. tomcat:java.lang.OutOfMemoryError: Java heap space
3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError
4. resin:java.lang.OutOfMemoryError
5. java:java.lang.OutOfMemoryError
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------正餐來了,當安裝和配置完weblogic以後滿懷欣喜的部署了專案想要一睹芳容,尼瑪怎麼也跑不起來,控制檯報錯如下:
java.lang.OutOfMemoryError: PermGen space
這個錯誤很明顯是記憶體溢位,通過一番查詢後終於找到了修改的地方,因為使用的是myeclipse繼承weblogic,解決方法如下:知其然必要知其所以然,下面介紹下配置引數的一些含義:
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 說明後面是JVM的引數,所以後面的其實都是JVM的引數了
-Xms128m JVM初始分配的堆記憶體-Xmx512m JVM最大允許分配的堆記憶體,按需分配-XX:PermSize=64M JVM初始分配的非堆記憶體-XX:MaxPermSize=128M JVM最大允許分配的非堆記憶體,按需分配
那麼問題又來了,什麼是堆什麼是非堆呢?
------------------------------------------------初識java記憶體概念--------------------------------------------------------------------
下圖是之前自己學習時整理的筆記,講的比較淺顯。
①什麼是棧?什麼是堆?什麼是方法區?
答:
棧:用於存放區域性變數
堆:存放new出來的物件
方法區:存放類的資訊(程式碼)、static變數、常量池等 //注:方法區也是屬於堆的一部分
解析Student s1=new Student()在記憶體中的分配過程
1、jvm執行到Student,首先在堆中查詢是不是有這個類的資訊,沒有就通過類載入器把這個類的資訊(屬性和方法等)載入進堆中。
2、執行Student s1 在棧中分配空間存放變數s1。(此時這個變數並沒有指向其他記憶體空間)
3、執行new Student(),在堆中的方法區外分配一片記憶體存放new出來的物件資訊(物件的方法只是存放地址指向方法區裡面的方法)
4、執行=賦值,將new出來的物件的記憶體空間的首地址賦給s1。
記憶體分析示意圖:
------------------------------------------------------JVM記憶體進階-------------------------------------------------------------------
現在我們隊堆的概念有了一個大概的瞭解,那麼回到上面的問題,什麼是非堆呢?
其實這裡是個叫法的不同,非堆其實指的就是上面的方法區。
關於這一部分的內容,小白就不說自己的感悟了(怕誤導大家),在度娘上看了位大神的部落格覺得甚是牛逼(ps:雖然我看得一知半解):
附上鍊接地址:http://www.cnblogs.com/dingyingsi/p/3760447.html
有興趣的朋友可以看看,說的真的很好。
在這也感謝下這位大牛分享的姿勢。。。fuck。。知識。---做人不能太汙啊
------------------------------------------------------------------------------------------------------------------------------------
最後總結:碼海無涯,回頭也不是岸啊