回答
有誰知道一旦被創建並拋出它的異常多少內存佔用?
這完全取決於例外。像任何其他對象一樣,它包含可變數量的數據;除了包含對String
和參考值是固定大小的參考,但String
; OK,這是有點誤導:
Exception e =
new Exception(new String("Some gigantic message ... lalalalalalalalla"));
(編輯:如果有人做了一件愚蠢的String
消息可以4MB本身可能只會被異常引用 - 我將它改爲非文字來顯式地顯示它可以是可收集的東西,自定義異常可以包含任何東西,但它是一個對象,除此之外,它還取決於far它已經被拋出,因爲它將堆棧軌跡保存在其中。在SO上有一個很好的Q/A;這覆蓋了這個問題:In java, what is the best way to determine the size of an object。 )
以及如何收集異常垃圾?
就像任何其他物體一樣。拋出異常調用堆棧和一兩件事情發生:
1)你抓住它,和它分配給catch塊的變量:
catch (Exception e) {
e
現在擁有獨一無二的參考例外。當不再有對它的引用時(即它不在catch塊底部的範圍內,或者它傳遞給它的對象被收集等)時,它將被收集。
2)您不會捕獲它,它會打到當前線程的調用堆棧頂部。此時,異常超出範圍,因此它將被收集,並且線程當然會停止。
**要完全迂腐,當我說「會得到收集」我的意思是最終當Java中的對象必須不再引用這是它的資格收集,並與它的GC交易。
這很容易找出你自己。啓動jvisualvm並附加到您想要配置的應用程序。 切換到內存選項卡並篩選您要查找的異常。
這應該給你一個關於異常對象使用多少字節的好圖片 - 以及這與你的總堆大小有何關係 - 以及它們收集的頻率和頻率。
使用Java Mission Control進行檢查。
Java異常的對象,從而任何其他對象的大小取決於由IT架構,如果你創造了你可以(例如)存儲電子郵件完整的二進制文件中的其他對象,直到你有空閒內存自定義異常。 您可以爲應用程序設置初始和最大空間。 可用空間動態變化,現在存在GC問題。 Java異常是對象,因此任何其他對象垃圾回收都使用您的環境中的規則。
有關異常的快速參考http://docs.oracle.com/javase/tutorial/essential/exceptions/
這是關於垃圾收集的文章,其中的關鍵概念是
總結在Java垃圾收集
1)Java堆分爲三個代爲了垃圾收集。這些是年輕一代,終身或老一代和彼爾姆地區。
2)新對象被創建到年輕一代,隨後移到老一代。
3)字符串池在堆的彼爾姆區域中產生,可以發生在空間燙髮垃圾收集但在JVM取決於到JVM。
4)。次要垃圾收集用於從伊甸空間中移動對象倖存者1個2倖存者空間和主要集合用於從年輕移動對象到年老代。
5)每當主要垃圾收集發生應用程序線程在此期間,這會降低應用程序的性能和吞吐量停止。
6)很少有性能的提高已經垃圾收集在Java 6中得到應用和我們平時使用的JRE 1.6.20運行我們的應用程序。
7)JVM命令行選項-Xmx和-Xms用於設置起始和最大尺寸爲Java堆。根據我的經驗,此參數的理想比例爲1:1或1:1.5,例如,您可以將-Xmx和-Xms都設置爲1GB或-Xms 1.2 GB和1.8 GB。
8)在Java中沒有手動進行垃圾回收的方式。
瞭解更多:http://javarevisited.blogspot.it/2011/04/garbage-collection-in-java.html
如果使用Java 7的約GC的野趣的問題是
Java 7 (JDK 7) garbage collection and documentation on G1
其他建議是有用的,如果你需要,如果你需要,可以只查看狀態蝙蝠調整您的應用程序的配置,您需要使用GC alg最終內存。
- 1. 內存不足異常java
- 2. Java堆大小內存
- 3. java內存大小優化
- 4. Java - 負數組大小異常錯誤
- 5. 大塊位圖的內存異常
- 6. 內存異常
- 7. 內存異常
- 8. 內存異常
- 9. ImageResizer內存不足大圖像異常
- 10. 太大圖片:內存不足異常
- 11. Java:找出對象的內存大小?
- 12. C#NAudio內存異常處理大文件時出現異常
- 13. TFS Java SDK拋出內存異常
- 14. java內存不足異常(jdbc)
- 15. 內存大小
- 16. 出存儲器異常由於大的位圖大小
- 17. 異常和內存
- 18. File.ReadAllBytes()內存異常
- 19. 內存異常 - Linq
- 20. Python內存異常
- 21. CLR內存異常
- 22. Android內存異常
- 23. 內存異常HashSet
- 24. Tomcat內存異常
- 25. ViewController異常更改大小
- 26. Java類與數組內存大小?
- 27. Java堆大小增加進出內存
- 28. Java - 小程序異常
- 29. C#非常大的字符串操作(內存不足異常)
- 30. LINQ加入上非常大的字典/內存溢出異常
它們就像任何其他Java對象一樣被收集。爲什麼他們會有什麼特別的? –
異常的大小將取決於您的Java實現和調用堆棧的深度。你需要什麼信息?你可能不應該有太多的例外,所以大部分時間都不重要。 – user2357112
我完全同意馬克,這應該是你的問題的答案 – Keerthivasan