如何識別Java中的內存泄漏

這篇文章將為大家詳細講解有關如何識別Java中的內存泄漏,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

寬城網站建設公司創(chuàng)新互聯(lián)建站,寬城網站設計制作,有大型網站制作公司豐富經驗。已為寬城1000多家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿營銷網站建設要多少錢,請找那個售后服務好的寬城做網站的公司定做!

內存泄漏的識別

在將程序部署到生產環(huán)境之前檢查一下是否存在內存泄漏的問題是很有必要的。這里可以通過垃圾收集器的指標來進行初步的判斷。

如何識別Java中的內存泄漏

如GC后內存使用仍然持續(xù)上升,那么就可能有內存泄漏的問題,比如上面的這幅圖,代碼可以查看GitHub(https://gist.github.com/dpryden/b2bb29ee2d146901b4ae)。不過在現實中內存像圖上一樣線性增加的可能性是很小的,見圖Old Gen,而GC suspension times或者Eden Space和Survivor空間使用并不足以識別出內存泄漏。

縮小問題的范圍

要找出內存泄漏的原因當下已經有許多工具可用,比如JVisualVM或者jStat。這些工具是JDK自帶的,所以大家隨時都能用。除了要識別一些常用的內部Java類,一些用戶自定義累同樣需要識別。

性能優(yōu)化

在日常的開發(fā)過程中,只要GC沒有影響到性能,開發(fā)者就不會去關注內存設置于配置。從而埋下了潛在的隱患:因為內存問題并不只有溢出和泄露,GC時間過長同樣會造成這個問題。比如下圖中GC占用了16%的CPU。

如何識別Java中的內存泄漏

Heap設置

Heap太小會導致頻繁的GC,從而情景不難想象:增加GC會消耗更多的CPU,同時在GC時JVM會被凍結,最后導致一個很差的性能??偟膩碚f,Heap太小的話,雖然GC時間變短,但是會變得更加頻繁。

Heap太大會導致GC時間邊長。GC不會經常發(fā)生,但是一旦被觸發(fā),那么VM會被凍結很久。

因此,如果這種情況下發(fā)生內存泄露,在最終JVM因為內存溢出崩潰之前,GC會非常頻繁或者時間特別長。

GC版本

從Java 6開始,GC就改變了很多。Java 7引入了G1GC作為CMS GC的替代選擇,而在Java 9中G1GC已成為默認選擇。Java 8中移除了PermGen Space,之前存儲在PermGen Space中的數據則改為存儲在本地內存或者棧中。

關于如何識別Java中的內存泄漏就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

本文名稱:如何識別Java中的內存泄漏
分享鏈接:http://bm7419.com/article38/jdegpp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站制作、手機網站建設、品牌網站建設、企業(yè)網站制作、網站維護、App開發(fā)

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司