日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

permgen_什么是PermGen泄漏?

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 permgen_什么是PermGen泄漏? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

permgen

接下來是對Java應用程序中特定類型的內存問題的實用介紹。 即–我們將分析導致java.lang.OutOfMemoryError:PermGen空間的錯誤 堆棧跟蹤中的癥狀。

首先,我們將介紹理解該主題所需的核心概念,并解釋什么是對象,類,類加載器和JVM內存模型。 如果您熟悉基本概念,則可以直接跳到下一部分,在此我將描述所討論錯誤的兩種典型情況以及解決它的提示和建議。

對象,類和類加載器

好吧,我不會從最基本的內容開始。 我想如果您已經找到我們,那么您應該熟悉Java中的一切都是Object的概念。 并且所有對象均由其類指定。 因此,每個對象都有對java.lang.Class實例的引用,該實例描述了該對象的類的結構。

但是,當您在代碼中創建一個新對象時,實際上發生了什么呢? 例如,如果您寫一些真正復雜的東西,例如

人老板=新人()

Java虛擬機(JVM)需要了解要創建的對象的結構。 為此,JVM查找名為Person的類。 而且,如果在程序的特定執行期間第一次訪問Person類,則通常必須從JVM從相應的Person.class文件中加載它。 在驅動器上查找Person.class文件,將其加載到內存中并解析其結構的過程稱為類加載 。 確保正確的類加載過程是ClassLoader的責任。 ClassLoader是java.lang.ClassLoader類的實例,Java程序中的每個類都必須由某個ClassLoader進行加載。 結果,我們現在具有以下關系:

從下圖可以看到,每個類加載器均包含對其已加載的所有類的引用。 就本文而言,這些關系非常有趣。

記住此圖像,稍后我們將需要它。

永久世代

如今,幾乎每個JVM都使用一個單獨的內存區域(稱為Permanent Generation,簡稱PermGen )來保存Java類的內部表示形式。 PermGen還用于存儲更多信息-如果您有興趣,請從這篇文章中查找詳細信息-但是對于我們的文章,可以安全地假設只有類定義存儲在PermGen中。 在運行Java 1.6的兩臺計算機上,該區域的默認大小不是非??捎^的82MB。

正如我在之前的一篇文章中所解釋的那樣,Java中的內存泄漏是指某些對象不再被應用程序使用,但是垃圾回收器無法將它們識別為未使用的情況。 如果那些未使用的對象對堆使用的貢獻很大,以致于應用程序無法滿足下一個內存分配請求,則會導致OutOfMemoryError

java.lang.OutOfMemoryError:PermGen空間的根本原因是完全相同的:JVM需要加載新類的定義,但是PermGen中沒有足夠的空間來執行此操作–那里已經存儲了太多的類。 可能的原因是您的應用程序或服務器使用了太多的類,而當前的PermGen大小卻無法容納它們。 另一個常見原因可能是內存泄漏。

永久泄漏

但是,仍然有可能在PermGen中泄漏某些東西嗎? 它保存著Java類的定義,它們不能成為未使用的,可以嗎? 實際上,他們可以。 如果將Java Web應用程序部署到應用程序服務器中,則在取消部署應用程序時,EAR / WAR中的所有這些類將變得毫無用處。 由于應用程序服務器仍在運行,因此JVM繼續運行,但是不再使用大量的類定義。 并且應該將它們從PermGen中刪除。 如果沒有,我們將在PermGen區域發生內存泄漏。

作為一個很好的例子,Tomcat開發人員已經建立了一個Wiki頁面,描述了在Apache Tomcat 6.0.24及更高版本中發現并修復的各種漏洞。

泄漏線程

類加載器泄漏的一種可能情況是長時間運行的線程。 當您的應用程序或您的應用程序使用的第三方庫(通常以我的經驗)啟動某個長時間運行的線程時,就會發生這種情況。 一個例子是計時器線程,其任務是定期執行一些代碼。

如果該線程的預期壽命不確定,我們將直接陷入麻煩。 當應用程序的任何部分啟動線程時,必須確保它不會使應用程序壽命更長。 在典型情況下,開發人員要么不了解此責任,要么干脆忘了編寫清理代碼。

否則,如果在取消部署應用程序后某個線程繼續運行,則通常將保留對由其啟動的Web應用程序的類加載器的引用,稱為上下文類加載器 。 反過來,這意味著未部署的應用程序的所有類繼續保留在內存中。 補救? 如果是您的應用程序啟動了新線程,則應在取消部署期間使用servlet上下文偵聽器將其關閉。 如果它是第三方庫,則應搜索其自己的特定關閉掛鉤。 或提交錯誤報告(如果沒有)。

驅動程序泄漏

數據庫驅動程序可能導致泄漏的另一種典型情況。 我們在Plumbr附帶的演示應用程序中遇到了此泄漏。 它是隨Spring MVC一起提供的經過稍微修改的Pet Clinic應用程序。 讓我們重點介紹將這個應用程序部署到服務器時發生的一些事情。

  • 服務器創建一個新的java.lang.Classloader實例,并開始使用它來加載應用程序的類。
  • 由于PetClinic使用HSQL數據庫,因此它將加載相應的JDBC驅動程序org.hsqldb.jdbcDriver
  • 此類是一種很好的JDBC驅動程序,根據JDBC規范的要求,在初始化期間將其自身注冊到java.sql.DriverManager 。 該注冊包括在DriverManager的靜態字段中存儲對org.hsqldb.jdbcDriver實例的引用。

現在,當從應用程序服務器取消部署應用程序時, java.sql.DriverManager仍將保留該引用,因為HSQLDB庫,Spring框架或應用程序中都沒有刪除該代碼的代碼! 如上文所述, jdbcDriver對象仍然持有對org.hsqldb.jdbcDriver類的引用,而該類又持有對用于加載應用程序的java.lang.Classloader實例的引用。 現在,該類加載器仍引用應用程序的所有類。 對于我們特定的演示應用程序,在應用程序啟動期間將加載近2000個類,在PermGen中約占10MB。 這意味著需要大約5到10個重新部署才能用默認大小填充PermGen來達到java.lang.OutOfMemoryError:PermGen空間崩潰。

如何解決? 一種可能性是編寫一個Servlet上下文偵聽器,該偵聽器在應用程序關閉期間從DriverManager注銷HSQLDB驅動程序。 這很簡單。 但是請記住–您將必須使用驅動程序在每個應用程序中編寫相應的代碼。

使用演示應用程序下載我們最新版本的Plumbr,并進行操作以了解泄漏的發生方式,Plumbr如何發現泄漏以及如何解釋原因。

結論

應用程序可能會遇到java.lang.OutOfMemoryError:PermGen space的原因很多。 大多數問題的根本原因是對由應用程序的類加載器加載的對象或類的引用,這些對象或類在此之后死亡。 或直接鏈接到類加載器本身。 對于大多數這些原因,您需要采取的補救措施非常相似。 首先,找出引用在哪里保存。 其次,向您的Web應用程序添加一個關閉掛鉤,以在應用程序取消部署期間刪除引用。 您可以通過使用Servlet上下文偵聽器或通過第三方庫提供的API來實現。

找到那些泄漏的參考從未如此簡單。 我們自己花了無數時間來尋找為什么某些應用程序每次重新部署都需要20MB的PermGen的原因。 但是從1.1版開始,Plumbr會向您顯示泄漏的原因,并提示您如何修復它。 如果您想嘗試一下,請注冊并下載該工具 。 如果您運行的是Plumbr的舊版本,我們強烈建議您下載升級程序 。

參考: 什么是PermGen泄漏? 由我們的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上獲得。

翻譯自: https://www.javacodegeeks.com/2012/12/what-is-a-permgen-leak.html

permgen

總結

以上是生活随笔為你收集整理的permgen_什么是PermGen泄漏?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷伊人网 | 阿v视频免费在线观看 | 欧美性猛交xxxx黑人猛交 | 亚洲人女屁股眼交6 | 内射毛片内射国产夫妻 | 公侵犯人妻一区二区三区 | av中文字幕在线看 | 欧美啪啪一区 | 国产一级视频在线观看 | 亚洲第九十七页 | 九九九热视频 | 日韩精品免费视频 | 中文字幕免费中文 | 国产成人啪精品午夜在线观看 | 日本免费精品 | 日韩视频免费 | 欧美xxxxhd| 欧美高h视频 | 欧美不卡在线观看 | 精品久久国产视频 | 人人cao | 国产一区二区在线观看免费 | 狠狠躁夜夜躁人人爽天天高潮 | 黄色天堂网 | 66亚洲一卡2卡新区成片发布 | 岛国av一区 | 日日草夜夜草 | xxxxwwww国产 | 三级欧美韩日大片在线看 | 成年人免费在线观看网站 | 欧美激情一区在线 | 欧美精品一二三四 | 黄色片网站在线观看 | 日韩在线成人 | 国内免费毛片 | 青草视频免费观看 | 久久九九免费视频 | 97色在线 | 99这里有精品 | 日韩专区第一页 | 性色综合| 亚洲一级中文字幕 | 亚洲AV午夜精品 | 在线观看中文字幕av | 国产成人精品一区二区三区视频 | 亚洲AV无码久久精品色三人行 | 亚洲国产视频在线观看 | 久久综合伊人77777蜜臀 | 在线免费观看视频网站 | 国产资源在线观看 | 奇米影视盒 | 观看av| 成人精品免费网站 | 久久天天| 国产精品人成在线观看免费 | 美女免费看片 | 亚洲男人的天堂在线 | 在线免费视频 | 中文字幕被公侵犯的漂亮人妻 | 欧美肥妇bwbwbwbxx | 黑人借宿巨大中文字幕 | 韩国妻子的朋友 | 一区二区三区国产 | 91猎奇在线观看 | 欧美一级片一区 | 精品人伦一区二区三区蜜桃网站 | 国产一级爱c视频 | 精品国产午夜福利 | 亚洲日本在线观看视频 | 欧美男人亚洲天堂 | 欧美日韩系列 | 色啦啦视频 | 欧美人与性动交g欧美精器 国产在线视频91 | 中国黄色一级毛片 | 亚洲国产精彩中文乱码av | 丰满少妇被猛烈进入高清播放 | 国产精品黄网站 | 色噜噜狠狠一区二区三区牛牛影视 | 熟妇人妻精品一区二区三区视频 | 久久人成| 欧美日韩123 | 国产精品-区区久久久狼 | 色站综合| 92久久 | 飘花影院伦理片 | 成人乱人乱一区二区三区 | 看片网址国产福利av中文字幕 | 日本a天堂| 另类捆绑调教少妇 | 瑟瑟视频在线看 | 久久免费国产精品 | 免费av一区二区 | 无码人妻精品一区二区蜜桃网站 | 午夜一级黄色片 | 日韩欧美一二三 | 麻豆传媒在线观看视频 | 加勒比色综合 | 一区二区三区精品在线观看 | 你懂的国产 |