精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何在您的Java應用中查找并修復內存泄漏

譯文
開發 后端 網站安全
您是否碰到過某個Java應用程序起初運行良好,經過一段時間后卻緩慢下來了?或者它在處理少量文件時性能不錯,文件量一旦增加就性能下降的情況呢?如出現這樣的情況,很可能您遇到了內存泄漏的問題。

【51CTO.com快譯】您是否碰到過某個Java應用程序起初運行良好,經過一段時間后卻緩慢下來了?或者它在處理少量文件時性能不錯,文件量一旦增加就性能下降的情況呢?如出現這樣的情況,很可能您遇到了內存泄漏的問題。

在應對內存泄漏時,如果有人問我:“你是否知道此事的前因后果和應對方法?”那么,我就會做出如下回答:

一、目標受眾

盡管在一般情況下,本文中所介紹的方法是獨立于IDE和操作系統的,但是我在此所用到的截圖和說明仍然來自于Fedora Linux和帶插件開發的Eclipse。

二、內存泄漏的癥狀

起初運行速度快,但隨著時間的推移速度就慢下來了。比如說:

  • 能夠正常處理少量數據集,但應對大量數據集時出現嚴重的性能問題。
  • 在您的JVM中,舊版本(Old-Generation)內存的使用率持續增加。
  • 在您的JVM中,出現內存耗盡的跳轉錯誤。
  • 無故自我崩潰。

三、常見的內存泄漏

Java中的內存泄漏通常發生在您忘記關閉某個資源,或是某個對象的引用沒能釋放的時候。例如:

  • 文件/文本緩沖區沒被關閉。(請參見:https://git.eclipse.org/r/#/c/31313/中的案例)
  • 在equals()和hashcode()不被使用時,各種哈希映射的引用仍然保持激活的狀態,例如:
    1. import java.util.Map; 
    2. public class MemLeak { 
    3. public final String key; 
    4. public MemLeak(String key) { 
    5.     this.key = key; 
    6. public static void main(String args[]) { 
    7.     try { 
    8.       Map map = System.getProperties(); 
    9.       for(;;) { 
    10.          map.put(new MemLeak("key"), "value"); 
    11.       } 
    12.     } catch(Exception e) { 
    13.         e.printStackTrace(); 
    14.     } 
    15.   } 
  • 其他各種細節(請參見:https://www.toptal.com/java/hunting-memory-leaks-in-java#memleak)
  • 那些引用了各種外部類的內部類所導致的泄漏。(可以將它們變成靜態來避免,請參見:https://blogs.oracle.com/olaf/entry/memory_leaks_made_easy)。

四、如何一次性修復它們?

這里提供兩種方法。第一種是嘗試“快速修復”。如果此法失敗,那么您就必須往下嘗試一條漫長的解決之路了。

  1. 快速修復:使用Eclipse內存泄漏的警告(去捕捉一些泄漏)。
  2. 手動禁用和啟用您代碼的各個部分,并使用VisualVM(Jconsole或Thermostat)之類的工具觀察JVM的內存使用情況。

1. 快速修復:Eclipse內存泄漏的警告/錯誤。

為了遵從JDK 1.5+的代碼規范,Eclipse會向您“拋出”一些明顯泄漏用例的警告和錯誤。更精確地說,任何使用了closable(如1.5后出現的outputStream)的對象,如果它的引用是被銷毀而不是封閉的話,就會拋出一個警告。然而在Eclipse的各個項目中,其檢漏功能并非總是被啟用的。因此,為了事先打開它們,您可以到項目的設置里,按照下圖所示進行開啟:

快速修復:Eclipse內存泄漏的警告/錯誤

此處Eclipse羅列出了各種內存泄漏:

Eclipse羅列出了各種內存泄漏

然而,就算使用了Eclipse的此項功能,系統仍無法探測到所有的文件關閉與泄漏。尤其是在使用舊式(1.5之前)代碼時,您很可能會因為它們在使用過程中僅僅只是“關閉”(closable)了,而遇到泄漏問題了。也有時候,文件在深度嵌套中被打開/關閉,也會導致Eclipse無法檢測到。因此如果您碰到這種情況,就可能需要去嘗試第2種方法了。

2. 手動禁用和啟用您代碼的各個部分,并使用VisualVM之類的工具觀察JVM的內存使用情況。

如果您步入了這一步,那就不得不卷起袖子,做一些體力勞動了。您需要通讀您的所有代碼,以試圖找出發生泄漏的地方。作為幫助,我建議您使用VisualVM之類的工具(當然,Thermostat和MAT也是可行的)。

a. 配置的VisualVM

(1) 下載該工具。

(2) 打開終端,到達目錄.../visualvm_xyz/bin下,運行shell腳本'./visualvm' (或在Windows上運行visualvm.exe)。

(3) 您會看到彈出的主窗口。如果展開“本地”并雙擊您正在運行的應用(如下圖,我的應用是一個子Eclipse),您就可以看到它的各種屬性。

(4) 在Fedora上用VisualVM進行故障診斷:對我來說,最初我無法連接到自己的JVM,也不能夠使堆轉儲(heap-dumps)和分析(profiling)運行起來。于是我探索出了如下步驟:

  • 確保用自己的登錄用戶身份運行它,而不是使用sudo。
  • 對系統進行全面更新(sudo yum update)。
  • 考慮重新啟動是否有所幫助。
  • 嘗試在關閉所有正在運行的Java應用程序之后,再啟動VisualVM。

(5) 添加一些插件。在使用VisualVM之前,我事先添加了一些插件。請點擊進入工具->插件->“可用插件”。請選擇如下的插件(如果您喜歡,則可以隨意瀏覽并添加更多的插件):

  • 內存池
  • 可視的GC
  • 終止應用程序

b. 用VisualVM分析運行的代碼

(1) 現在運行您的Java應用程序。

(2) 將VisualVM連接到您的應用程序。

(3) 執行那些容易導致性能變緩的操作。

(4) 檢查“監控”和“內存池”選項卡。如果您看到在“監視器”選項卡中內存顯示增加的話,那就按下“執行GC”(垃圾收集),并監視內存的使用情況是否有所減少。

(5) 如果并不減少的話,那么就切換到“內存池”選項卡,并檢查“Old Gen”(最開始的對象會停留在“Eden”中,然后通過Survivor空間進行過渡,比較舊的對象會被移到“Old Gen”池中。如果出現泄漏,則會出現在Old-Gen池里。)。

(6) 現在返回去,并注釋掉程序代碼的大部分,從而定位到應用程序開始變慢的位置。

(7) 重復上述過程,直到應用程序完全不再有泄漏的發生。

(8) 然后,經過反復迭代來重新啟用代碼的各個部分,并檢查VisualVM的內存使用情況。一旦您的應用程序再次開始泄漏,則馬上進入導致內存泄漏的該函數方法,從而進一步縮小代碼的考察范圍。

(9) 最終,您將能夠把問題縮小到具體某一個類,甚至某一個單一的方法上。請仔細驗證所有文件的緩沖區是否已被關閉,而HashMap是否被正確的使用了。

五、標準化您的代碼

有時候會很難確定您那“金光閃閃”的新代碼是否真的會比舊代碼更好。面對這種情況下,您需要去標準化應用程序的性能。您可以將下面的這段代碼插入到任何您認為適當的位置,以獲取有關運行時間和垃圾收集次數的相關信息:

  1. long start = System.currentTimeMillis(); 
  2. .. 
  3.  //your code 
  4. .. 
  5. long end = System.currentTimeMillis(); 
  6. System.out.println("Run time: " + Long.toString(end - start)); 
  7. System.out.println(printGCStats()); 
  8. public static String printGCStats() { 
  9.  long totalGarbageCollections = 0
  10.  long garbageCollectionTime = 0
  11.  for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { 
  12.  long count = gc.getCollectionCount(); 
  13.  if (count >= 0) { 
  14.  totalGarbageCollections += count; 
  15.  } 
  16.  long time = gc.getCollectionTime(); 
  17.  if (time >= 0) { 
  18.  garbageCollectionTime += time; 
  19.  } 
  20.  } 
  21.  return "Garbage Collections: " + totalGarbageCollections + "n" + 
  22.  "Garbage Collection Time (ms): " + garbageCollectionTime; 

特別提醒一下:如果您是在主Eclipse中進行測試的話,我建議去測試一個“干凈”的子Eclipse;或者是在您的Eclipse的一些“干凈”實例中進行。因為這樣的話,其他各種插件是不會對標準的耗時產生影響的。

六、附加說明:堆轉儲

我個人使用的并不多,但有些人比較熱衷于“堆轉儲”。您可以在任何時候采取堆轉儲,然后查看有多少類的實例被打開,以及它們使用了多大的空間。您可以通過雙擊它們來查看具體的內容。如果您想獲悉自己的應用程序產生了多少個對象的話,這種方法會非常有用。

堆轉儲

七、我的應用并沒有泄漏,可為何還是很慢?

當然也存在著一種可能性:就算您的代碼中并沒有任何的泄漏,它仍然運行緩慢。如果出現這種情況的話,您就必須進行代碼分析了。不過,代碼分析已經超出了本文所涉及的范圍。這里推薦一個很好的YouTube視頻,它講解了如何去使用免費和付費的分析器來對Eclipse進行分析,請參見:https://www.youtube.com/watch?v=YCC-CpTE2LU。

八、還能看哪些?

至此您可以潛下心來,花上一到兩天的時間去修復您的內存泄漏問題了。在此過程中,如果您仍碰到麻煩的話,請參考如下的鏈接:

  • 捕捉內存泄漏:https://www.toptal.com/java/hunting-memory-leaks-in-java
  • 內部類的內存泄漏問題:https://blogs.oracle.com/olaf/entry/memory_leaks_made_easy
  • 瀏覽Oracle的JVM GC指南:www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

原標題:How to Find and Fix Memory Leaks in Your Java Application,作者: Leo Ufimtsev

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

責任編輯:趙寧寧 來源: 51CTO.com
相關推薦

2023-12-18 10:45:23

內存泄漏計算機服務器

2024-12-05 08:58:47

2018-05-30 14:29:14

WindowsWindows 10系統文件

2024-01-30 10:12:00

Java內存泄漏

2022-05-26 09:51:50

JavaScrip內存泄漏

2023-01-31 16:54:47

Linux端口

2024-11-29 08:20:23

Rust內存泄漏

2019-12-06 10:05:28

Windows 10手機應用程序

2025-05-06 07:24:24

2018-08-30 10:00:12

Windows 10修復黑屏

2012-08-13 10:14:36

IBMdW

2025-06-26 02:14:00

Java本地內存排查方法

2020-01-03 16:04:10

Node.js內存泄漏

2019-10-29 09:10:57

Windows 10照片應用標記人物

2019-01-30 18:24:14

Java內存泄漏編程語言

2010-10-28 09:21:42

oracle中存圖片

2018-08-23 10:50:08

Windows 10Windows隱私

2021-08-09 11:31:54

Linux重復相片刪除

2023-02-07 08:13:47

Linux符號鏈接

2017-11-09 16:07:00

Web應用內存
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久久久久久久午夜片 | 三级欧美在线一区| 亚洲欧美一区二区精品久久久| 日本成人中文字幕在线| 欧美尤物美女在线| 国产91精品一区二区麻豆网站| 97人洗澡人人免费公开视频碰碰碰| www.色多多| 丁香婷婷久久| 夜夜爽夜夜爽精品视频| 免费成人在线观看av| 制服丝袜在线一区| 亚洲视频综合| 国产亚洲欧洲黄色| 国产探花一区二区三区| 中文在线最新版地址| 国产精品久久久久久久久免费相片| 亚洲xxxx在线| 欧美亚洲另类小说| 你懂的网址国产 欧美| 日韩久久精品电影| 一区二区三区欧美精品| 老牛影视精品| 亚洲精品免费在线播放| 欧美性天天影院| 国产高清第一页| 日韩黄色片在线观看| 久久久久中文字幕2018| 激情无码人妻又粗又大| 婷婷五月色综合香五月| 日韩一区二区三区精品视频| 国产真人无码作爱视频免费| 91九色在线播放| 亚洲视频一二区| 乱色588欧美| 日本wwwxxxx| 国产一区二区三区精品欧美日韩一区二区三区 | 国产成人77亚洲精品www| 亚洲综合在线视频| 天天成人综合网| 高清中文字幕一区二区三区| 92国产精品观看| 超碰97在线资源| 国产精品久久久久久久一区二区 | 欧美激情日韩图片| 午夜国产小视频| 欧美熟乱15p| 亚洲精品自拍视频| 中国xxxx性xxxx产国| 亚洲综合伊人| 欧美美女bb生活片| 少妇一级淫免费播放| 男人最爱成人网| 欧美日韩国产精品专区 | 亚洲一区二区三区高清| 欧美疯狂性受xxxxx另类| 日韩欧美123区| 国产精品毛片a∨一区二区三区|国| 亚洲成年人av| 精品国产亚洲一区二区三区在线 | 日韩a级大片| 亚洲电影在线看| 国产激情第一页| 高清一区二区三区| 精品福利一区二区三区免费视频| www.黄色网| 国产人妖ts一区二区| 精品国产一区久久| 国产精品久久久久久亚洲色 | 日韩欧美亚洲国产另类 | 成人免费毛片视频| 欧美亚洲在线| 国产999在线观看| 日本精品入口免费视频| 免费在线观看视频一区| 国产精品永久免费视频| 国产女无套免费视频| 国产精品影视网| 91手机在线播放| 狠狠躁日日躁夜夜躁av| av成人免费在线| 欧美日本韩国国产| 在线观看免费网站黄| 亚洲手机成人高清视频| 蜜臀av无码一区二区三区| 麻豆蜜桃在线观看| 欧美亚洲自拍偷拍| 国产探花在线观看视频| av不卡一区| 亚洲品质视频自拍网| 成年人视频软件| 女人香蕉久久**毛片精品| 欧美极品少妇与黑人| 日本一区二区三区精品| 免费一级欧美片在线观看| 成人在线中文字幕| 人妻一区二区三区| 国产精品网站在线播放| av一区二区三区免费观看| 大桥未久在线视频| 欧美午夜精品电影| 亚洲成人精品在线播放| 综合干狼人综合首页| 最近2019中文字幕mv免费看| 黄色一级视频在线观看| 久久精品网址| 99re在线| jizz日韩| 无吗不卡中文字幕| 色91精品久久久久久久久| 国偷自产av一区二区三区| 亚洲片在线资源| 五月天综合在线| 老司机一区二区| 欧美日韩精品久久| 性xxxxfjsxxxxx欧美| 欧美中文字幕一区二区三区亚洲| 中文字幕乱码在线人视频| 羞羞色国产精品网站| 久久中文字幕视频| 国产裸体美女永久免费无遮挡| 国产 欧美在线| 一区二区不卡在线视频 午夜欧美不卡'| 免费男女羞羞的视频网站在线观看| 91福利小视频| 成人免费看aa片| 欧美日韩91| 国产专区精品视频| 国产中文在线视频| 午夜精品一区二区三区三上悠亚| 亚洲最大天堂网| 欧美精品一区二区三区中文字幕 | 国产亚洲精品久久777777| 美国一区二区三区在线播放| 久久国产人妖系列| 久久影视电视剧免费网站清宫辞电视| 免费看日韩毛片| 国产精品一区二区在线播放 | 国产乱理伦片a级在线观看| 亚洲国产精品一区二区www在线| www.污污视频| 成人嫩草影院| 国产精品成人av性教育| 色播色播色播色播色播在线| 亚洲国产成人va在线观看天堂| 欧美一级免费在线| 欧美日韩中文一区二区| 国产成人精品亚洲精品| 日本福利片高清在线观看| 亚洲美腿欧美偷拍| 免费人成视频在线播放| 天天揉久久久久亚洲精品| 国产精品私拍pans大尺度在线| 狠狠狠综合7777久夜色撩人| 欧美性xxxx极品hd满灌| 国产福利短视频| 亚洲欧美日韩精品一区二区| 蜜桃麻豆www久久国产精品| 日韩精品美女| 亚洲欧美国产一区二区三区| 国产一级在线免费观看| 成人一区二区三区视频| 一二三四中文字幕| 99精品中文字幕在线不卡| 欧美国产第二页| 国产不卡av在线播放| 一区二区在线看| 高清中文字幕mv的电影| 99视频一区| 欧美日韩一区二区视频在线观看| 日韩欧美另类一区二区| 中国人与牲禽动交精品| 夜夜躁狠狠躁日日躁av| 国产精品欧美一级免费| www.com久久久| 韩日成人在线| 精品不卡在线| 日本欧美不卡| 久久久精品影院| 性一交一乱一伧老太| 午夜欧美在线一二页| 素人fc2av清纯18岁| 久久久噜噜噜| 综合视频在线观看| 91精品国产自产在线丝袜啪| 91av中文字幕| 欧美黑人激情| 欧美精品一区二区三区蜜臀 | 免费在线看电影| 日韩精品视频在线免费观看| 波多野结衣在线观看视频| 最新中文字幕一区二区三区 | www.浪潮av.com| 日韩在线观看| 国产精品午夜av在线| 日本高清不卡一区二区三区视频| 日韩有码视频在线| 欧美少妇bbw| 91福利资源站| 久久久久久蜜桃| 久久免费视频色| 999在线精品视频| 中文亚洲欧美| eeuss中文| 综合干狼人综合首页| 成人中心免费视频| 国产高清不卡| 欧美成人精品在线| 国内三级在线观看| 日韩欧美国产一区在线观看| 色老头一区二区| 亚洲一区二区三区四区不卡| 三区四区在线观看| 9久草视频在线视频精品| 老司机久久精品| 免费日韩精品中文字幕视频在线| 特色特色大片在线| 精品午夜久久| 国产精品日韩一区二区| 欧美特黄色片| 国产精品va在线播放我和闺蜜| 久草在线视频网站| 久久精品国产久精国产思思| 欧美拍拍视频| 亚洲国产免费av| a级片免费视频| 欧美日韩在线播放一区| 视频一区二区三区四区五区| 亚洲国产精品一区二区尤物区| 亚洲一区电影在线观看| 久久精品男人天堂av| 岛国精品资源网站| 国产成人啪午夜精品网站男同| 日韩爱爱小视频| 天堂久久一区二区三区| 欧美一级欧美一级| 你懂的视频一区二区| 宅男噜噜99国产精品观看免费| 精品国产午夜| 欧美日韩在线一二三| 日韩福利视频一区| 国产美女精品在线观看| 日韩视频在线直播| 3d蒂法精品啪啪一区二区免费| 日韩第二十一页| 国产精品自产拍在线观看| 最新日韩三级| 国产成人av网址| 欧美一级大黄| 国产精品av在线播放| 欧美gay视频| 国产精品第100页| 国模视频一区| 国产精品亚洲自拍| 亚洲综合视频| 成人影片在线播放| 久久久久久毛片免费看| 女人一区二区三区| 日韩在线观看| 欧美日韩dvd| 99在线|亚洲一区二区| 男女高潮又爽又黄又无遮挡| 久久国产欧美| 色播五月综合网| 国产伦精一区二区三区| 国产麻豆剧传媒精品国产| 成人h动漫精品| 野外性满足hd| 亚洲欧洲美洲综合色网| 欧美成人三级视频| 亚洲成av人影院| 亚洲 欧美 成人| 欧美视频一区二区三区在线观看| 国产理论片在线观看| 精品国产一区久久| 黄色片在线看| 久久九九热免费视频| a国产在线视频| 国产精品大陆在线观看| 蜜桃在线一区| 蜜桃传媒一区二区| 国产精品久久久久久久免费观看| av在线com| 老色鬼久久亚洲一区二区| 久国产精品视频| 成人国产视频在线观看| 国产一区二区三区精品在线| 亚洲精品你懂的| www.youjizz.com亚洲| 欧美日韩中文字幕在线视频| 久久99久久久| 中文无码日韩欧| 国产这里只有精品| 亚洲精品aaa| 国产在线精品一区| 精品日本12videosex| 中文字幕日韩精品无码内射| 亚洲国产免费看| www.99在线| bt7086福利一区国产| 国产又大又粗又爽的毛片| 中文字幕第一区综合| 免费麻豆国产一区二区三区四区| 精品久久久香蕉免费精品视频| 中文字幕乱码人妻二区三区| 日韩视频永久免费| 香蕉视频黄在线观看| 欧美久久精品一级黑人c片| 女厕盗摄一区二区三区| 26uuu亚洲国产精品| 日韩黄色av| 日韩精品伦理第一区| 亚洲激情成人| 粉色视频免费看| wwwwxxxxx欧美| 久久精品欧美一区二区| 欧美日韩黄视频| 韩国中文字幕2020精品| 九九精品在线播放| 日韩欧美少妇| 久中文字幕一区| 黄色国产精品| 国产精品久久久久野外| 亚洲国产精品ⅴa在线观看| 精品无码一区二区三区电影桃花 | 色猫猫国产区一区二在线视频| 亚洲精品无码久久久久| 日韩欧美二区三区| www.黄在线观看| 国产91精品网站| 亚洲天堂av资源在线观看| 亚洲成人在线视频网站| 99精品国产在热久久下载| 91精产国品一二三产区别沈先生| 国产传媒日韩欧美成人| av资源在线免费观看| 黑人精品xxx一区| 日本精品久久久久久| 欧美成人小视频| 久久夜夜久久| 欧美一区二区三区电影在线观看| 亚洲激情女人| 国产精品伦子伦| 亚洲国产精品视频| 亚洲国产无线乱码在线观看| 日韩精品一二三四区| 国产又色又爽又黄刺激在线视频| 国产精品三级美女白浆呻吟| 自拍欧美一区| 高清在线观看免费| 久久久影院官网| 免费在线不卡视频| 精品久久久久久久久久久久包黑料 | 日日摸夜夜添夜夜添亚洲女人| 国产精品久久久久久亚洲色| 亚洲欧美日韩中文播放| 国产美女免费视频| 一区二区亚洲精品国产| 国产亚洲欧美日韩精品一区二区三区| 欧美精品一区二区三区久久| 国产精品主播| 国产手机在线观看| 精品久久久久久| 飘雪影院手机免费高清版在线观看 | 国产精品一区二区三区成人| 欧美精品尤物在线观看| 午夜dv内射一区二区| 久久久午夜精品理论片中文字幕| 久久国产精品系列| 精品偷拍一区二区三区在线看| 五月天av在线| 欧洲久久久久久| 日本大胆欧美人术艺术动态 | 一级黄色a毛片| www.欧美精品| 国产一区二区三区| 在线综合视频网站| 成人美女在线观看| 国产对白videos麻豆高潮| 日韩精品一二三四区| 欧美第一视频| 亚洲欧美日韩在线综合| 老司机精品视频在线| 丝袜美腿小色网| 精品免费一区二区三区| free性护士videos欧美| 免费在线观看91| 蜜臀久久99精品久久久画质超高清| 亚洲区一区二区三| 欧美色中文字幕| gogogo高清在线观看免费完整版| 国产区亚洲区欧美区| 亚洲精品影视| 亚洲一区视频在线播放| 欧美在线一区二区| av免费在线观看网址| 精品国产免费一区二区三区| 久久xxxx精品视频| 人人爽人人爽人人片| 日韩美女主播在线视频一区二区三区|