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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

内存不足而没有OutOfMemoryError

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存不足而没有OutOfMemoryError 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這實際上是最初發布于2010年的帖子的轉世。 昨天,當聽到我們的工程師咒罵一個特別令人討厭的錯誤時,閃回發生了。 當詛咒停止時,我走過去核實我的懷疑。 瞧,我是正確的–情緒波動是由應用程序用盡了堆空間導致的,但死于沒有通常的OutOfMemoryError癥狀。

因此,讓我通過三年前我第一次遇到的相同代碼示例來說明缺少OutOfMemoryError的情況。 那時我使用的是Windows XP,安裝了2010年中期的JDK 6。

我在玩的是Plumbr的早期發行版,該發行版應該是從應用程序中發現內存泄漏的。(編輯:那時,它除了崩潰JDK之外幾乎沒有做任何事情)。 為了驗證這一點,我寫了一個小片段,我認為這對于泄漏發現是一個很好的測試用例(編輯:實際上不是)。 我能夠創建并啟動以下命令:

class Leak { static List list = new ArrayList(); public static void main(String[] args) { for (int i = 0; i >= 0 ;i++) { list.add(i); } System.out.println("I will either reach here or die trying"); } }

對于marketoid來說相當不錯,是嗎? 但是您認為運行顯示在我的命令提示符下的代碼是什么:

選項A:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:2760)at java.util.Arrays.copyOf(Arrays.java:2734)at java.util.ArrayList.ensureCapacity(ArrayList.java:167)at java.util.ArrayList.add(ArrayList.java:351)at Leak.main(Leak.java:6)

選項B:

I will either reach here or die trying

好吧,正如我發現的那樣,它什么都不會打印出來,所以我幾乎只能盯著空的命令提示符。

由于距離我上一次真正的Java開發經驗只有兩年,之后才被降級為管理人員,所以我沒有時間進行故障排除。 因此,我將樣本帶給了鐵桿Java黑客,這些黑客后來被稱為Zeroturnaround的創始人。 在過去的十分鐘中,我設法使它們看上去也眼花azz亂,在它出現之前-內存的分配方式使得沒有空間可以創建new OutOfMemoryError() 。

如果使用2010年中的JDK版本在Windows XP上以64MB堆(默認)執行上述操作,則會看到無提示失敗:

C:\work\snippets\leak java -Xmx64m Leak C:\work\snippets\leak

但是,如果您稍微增加(實際上可以修改)堆大小,則會遇到更熟悉的情況:

C:\work\snippets\leak java -Xmx65m Leak Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:2760)at java.util.Arrays.copyOf(Arrays.java:2734)at java.util.ArrayList.ensureCapacity(ArrayList.java:167)at java.util.ArrayList.add(ArrayList.java:351)at Leak.main(Leak.java:6) C:\work\snippets\leak

故事的道德啟示? 我只能建議升級到一個更現代的版本–不管我嘗試了哪種配置,我都無法使用今天在Mac上擁有的JDK 7版本來重新創建這種情況。 但是,查看有關流行的Java運行時配置的統計信息,您會發現可追溯到2010年之前版本的JDK部署數量驚人,這意味著問題仍然存在,迫使開發人員瘋狂地通宵達旦,試圖找出源代碼。這個問題沒有來自堆棧跟蹤的任何提示來支持它們。

無論如何,以我對JDK 6內部的廣泛知識支持工程團隊,我繼續前進,并從我曾經貢獻過的被人們遺忘的博客中恢復了這篇帖子。

參考: Plumbr博客的 JCG合作伙伴 IvoM?gi 指出,內存用完了而沒有OutOfMemoryError 。

翻譯自: https://www.javacodegeeks.com/2013/10/running-out-of-memory-without-the-outofmemoryerror.html

總結

以上是生活随笔為你收集整理的内存不足而没有OutOfMemoryError的全部內容,希望文章能夠幫你解決所遇到的問題。

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