你可以先用內存監(jiān)控工具,進行監(jiān)控,看看這個功能到底用多少內存。如果不多,其實都不需要實現你說的代碼監(jiān)控的。如果你要使用代碼監(jiān)控,你可是使用Runtime類的幾個屬性,MaxMemory、FreeMemory、TotalMemory。然后實現個線程,在下載pdf功能前開啟線程,然后完畢時關閉線程,如果內存即將溢出(設定個閾值,比如說15%),就報錯,跳轉到錯誤頁面。
創(chuàng)新互聯專注于金湖企業(yè)網站建設,響應式網站設計,商城建設。金湖網站建設公司,為金湖等地區(qū)提供建站服務。全流程按需設計網站,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯專業(yè)和態(tài)度為您提供的服務
Thread對象本身是在堆內存創(chuàng)建的,調用start()后開辟的線程空間是屬于棧內存的。內存管理在Java語言中是JVM自動操作的,當JVM發(fā)現某些對象不再需要的時候,就會對該對象占用的內存進行重分配(釋放)操作,而且使得分配出來的內存能夠提供給所需要的對象。
在一些編程語言里面,內存管理是一個程序的職責,但是書寫過C++的程序員很清楚,如果該程序需要自己來書寫很有可能引起很嚴重的錯誤或者說不可預料的程序行為,最終大部分開發(fā)時間都花在了調試這種程序以及修復相關錯誤上。
相關信息
在以前的編程過程中,手動內存管理帶了計算機程序不可避免的錯誤,而且這種錯誤對計算機程序是毀滅性的,所以內存管理就成為了一個很重要的話題,但是針對大多數純面向對象語言而言,比如Java,提供了語言本身具有的內存特性。
自動化內存管理,這種語言提供了一個程序垃圾回收器(Garbage Collector[GC]),自動內存管理提供了一個抽象的接口以及更加可靠的代碼使得內存能夠在程序里面進行合理的分配。最常見的情況就是垃圾回收器避免了懸掛引用的問題。
因為一旦這些對象沒有被任何引用“可達”的時候,也就是這些對象在JVM的內存池里面成為了不可引用對象,該垃圾回收器會直接回收掉這些對象占用的內存,當然這些對象必須滿足垃圾回收器回收的某些對象規(guī)則,而垃圾回收器在回收的時候會自動釋放掉這些內存。
首先java內存可以大體分為堆內存和棧內存。一般收的內存使用過大是指堆內存使用過大。一般分步驟分析。
現在內存過大到底到何種程度。是否引起了GC或者FUll GC。是否影響了正常工作。
1.明白現在內存有多大,可以通過工具看,和使用的內存比例。如果項目中需要緩存很多緩存,可以理解使用是合理的。如果服務器內存夠大,應用可以適當調整XMX xms參數進行JVM調整。
2.如果系統(tǒng)中沒有使用緩存,和大對象內存過高,那就考慮是否有內存泄漏。可以使用jmap等jVM調優(yōu)工具進行對象分析。然后定位過高原因修改代碼。
jmap -dump:format=b,file=文件名 [pid]
dump當前系統(tǒng),根據dump文件我們可以分析當前系統(tǒng)中存在的內存問題。
分析dump文件的工具很多,JDK自帶的Jhat,Eclipse也有相關的插件。
我使用的是Eclipse Memory Analyzer,功能很強大,能夠生成各種報表,另外可以在不同的時間生成不同的dump,然后通過工具分析兩個dump的內存變化。
大家專注我,我寫了好多JVM 原理和調優(yōu)的文章。
文版權歸是三僡然所有,轉載請標明出處。歡迎轉載,歡迎評論,歡迎分享。如果你有文章想分享可以聯系我。
先看下是否有內存泄露,簡單的方法就是隔一段時間檢查下內存,看看是否是持續(xù)上升。
然后看下資源是否可以優(yōu)化,比如你加載的圖片有沒有resize過,盡可能減少資源的內存消耗。
游戲卡頓最主要的是FPS幀率太低,把幀率統(tǒng)計輸出來看下。檢查下UI線程里或者OpenGL線程里是否做了I/O操作,這個是造成卡頓的主要原因。把I/O操作全部放入工作線程中,UI線程只做數據讀取和渲染。這樣幀率就可以提高了
分享標題:java代碼占用內存 java內存消耗太大
文章網址:http://www.chinadenli.net/article38/dohgppp.html
成都網站建設公司_創(chuàng)新互聯,為您提供建站公司、網頁設計公司、網站策劃、網站收錄、網站營銷、網站排名
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯