第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用Java創(chuàng)建內(nèi)存泄漏

用Java創(chuàng)建內(nèi)存泄漏

慕哥9229398 2019-06-06 13:20:41
用Java創(chuàng)建內(nèi)存泄漏我剛剛進行了一次面試,我被要求創(chuàng)建一個內(nèi)存泄漏用爪哇。不用說,我覺得自己很笨,根本不知道怎么開始創(chuàng)作。舉個例子怎么樣?
查看完整描述

3 回答

?
慕森王

TA貢獻1777條經(jīng)驗 獲得超3個贊

下面是在純Java中創(chuàng)建真正內(nèi)存泄漏(運行代碼無法訪問但仍存儲在內(nèi)存中的對象)的好方法:

  1. 應(yīng)用程序創(chuàng)建一個長時間運行的線程(或者使用線程池更快地泄漏)。
  2. 線程通過一個(可選的自定義)ClassLoader加載一個類。
  3. 類分配大量內(nèi)存(例如:

    new byte[1000000]

    ),在靜態(tài)字段中存儲對它的強引用,然后將對自身的引用存儲在ThreadLocal中。分配額外的內(nèi)存是可選的(泄漏Class實例就足夠了),但是它會使泄漏的速度更快。
  4. 線程清除對自定義類或從其加載的ClassLoader的所有引用。
  5. 重復(fù)一遍。

這是因為ThreadLocal保存了對象的引用,對象保留了對其類的引用,而該類又保留了對ClassLoader的引用。而ClassLoader則保留對其加載的所有類的引用。

(在許多JVM實現(xiàn)中,尤其是在Java 7之前,情況更糟,因為類和ClassLoader被直接分配到permgen中,根本沒有GC。但是,不管JVM如何處理類卸載,ThreadLocal仍然會阻止Class對象的回收。)

這種模式的一個變化是,為什么應(yīng)用程序容器(如Tomcat)會像篩子一樣泄漏內(nèi)存,如果您經(jīng)常重新部署碰巧以任何方式使用ThreadLocals的應(yīng)用程序。(由于應(yīng)用程序容器使用所描述的線程,而且每次重新部署應(yīng)用程序時,都會使用新的ClassLoader。)

更新因為很多人一直在要求它,下面是一些示例代碼,它顯示了這種行為的作用.


查看完整回答
反對 回復(fù) 2019-06-06
?
守著一只汪

TA貢獻1872條經(jīng)驗 獲得超4個贊

要做的一件簡單的事情是使用帶有不正確(或不存在)的HashSet。hashCode()equals(),然后繼續(xù)添加“重復(fù)”。而不是忽略重復(fù)的應(yīng)該,集將永遠只會增長,你將無法刪除他們。

如果您希望這些壞的鍵/元素在周圍徘徊,您可以使用一個靜態(tài)字段,如

class BadKey {
   // no hashCode or equals();
   public final String key;
   public BadKey(String key) { this.key = key; }}Map map = System.getProperties();map.put(new BadKey("key"), "value");
    // Memory leak even if your threads die.


查看完整回答
反對 回復(fù) 2019-06-06
  • 3 回答
  • 0 關(guān)注
  • 507 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號