避免記憶體溢位
引起記憶體溢位的原因有很多,常見的有以下幾種:
1.記憶體中載入的資料量過於龐大,如一次從資料庫中取出過多的資料;
2.集合類中有對物件的引用,使用完後未清空,使得JVM不能回收;
3.程式碼中存在死迴圈或者迴圈產生過多重複的物件實體;
4.使用的第三方軟體中的BUG;
5.啟動引數記憶體值設定的過小。
記憶體溢位的解決方案:
1.修改JVM啟動引數,直接增加記憶體(-Xms、-Xmx);
2.檢查錯誤日誌,檢視“OutOfMemory”錯誤前是否有其它異常或錯誤;
3.對程式碼進行走查和分析,找出可能發生記憶體溢位的位置。
重點排查以下幾點:
1.檢查對資料庫查詢中,是否有一次獲得全部資料的查詢。一般來說,如果一次獲取十萬條記錄到記憶體中,就可能引起記憶體溢位。這個問題比較隱蔽,在上線前,資料庫中資料較少,不容易出問題,上線後,資料庫中資料多了,一次查詢就有可能引起記憶體溢位。因此對於資料庫查詢儘量採用分頁的方式查詢。
2.檢查程式碼中是否有死迴圈或遞迴呼叫。
3.檢查是否有大迴圈重複產生新物件實體。
4.檢查List、Map等集合物件是否有使用完後,未清除的問題。List、Map等集合物件會始終存有對物件的引用,使得這些物件不能被GC回收。
相關推薦
優雅地使用Handler,避免記憶體溢位、空指標
在Activity中直接建立Handler的內部類,比如這樣: public class HandlerActivity extends AppCompatActivity { private Handler mHandler = new Handler() {
Android避免記憶體溢位(Out of Memory)方法總結
避免記憶體溢位的方法,主要是對以下三個方面對程式進行優化 記憶體引用 在處理記憶體引用之前,我們先來複習下什麼是強引用、軟引用、弱引用、虛引用 強引用:強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。 當記憶體空間不足,Java虛擬機器寧願丟擲O
android 圖片壓縮避免記憶體溢位的解決辦法
在android中的很多應用中都需要拍照上傳圖片,隨著手機的畫素越來越高,拍攝的圖片也越來越大。在拍攝後顯示的時候,使用universalimageloader.這個開源專案可以避免記憶體溢位。但是在上傳的時候,一般需要壓縮,但是壓縮的時候很容易導致記憶體溢位。解決的辦法就是,壓縮後的二進位制流,不用匯出B
避免記憶體溢位
引起記憶體溢位的原因有很多,常見的有以下幾種:1.記憶體中載入的資料量過於龐大,如一次從資料庫中取出過多的資料;2.集合類中有對物件的引用,使用完後未清空,使得JVM不能回收;3.程式碼中存在死迴圈或者迴圈產生過多重複的物件實體;4.使用的第三方軟體中的BUG;5.啟動引數記憶體值設定的過小。記憶體溢位的解決
Android利用縮放載入大圖片避免記憶體溢位
因為安卓的堆記憶體有限(儘管現在隨著安卓手機螢幕解析度的提高堆記憶體沒有以前小螢幕時代那麼侷限),要是完全載入一張大圖片很容易導致OOM(out of memory)的問題。 所以為了解決這一情況,我
記憶體溢位和記憶體洩漏的區別和如何避免記憶體溢位
記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是記憶體溢位。 記憶體洩露 memory leak,是指程式在申請記憶體後,無
C# 修改 Bitmap 尺寸 避免記憶體溢位
public static Bitmap KiResizeImage(Bitmap bmp, int newW, int newH) { try { Bitmap b = new Bitmap(newW, newH);
java 匯出 excel 最佳實踐,java 大檔案 excel 避免OOM(記憶體溢位) exce
產品需求 產品經理需要匯出一個頁面的所有的資訊到 EXCEL 檔案。 需求分析 對於 excel 匯出,是一個很常見的需求。 最常見的解決方案就是使用 poi 直接同步匯出一個 excel 檔案。 客戶體驗 & 服務效能 客戶體驗 如果匯出的檔案比較大,比如幾十萬條資料,同步匯
java 匯出 excel 最佳實踐,java 大檔案 excel 避免OOM(記憶體溢位) excel 工具框架
產品需求 產品經理需要匯出一個頁面的所有的資訊到 EXCEL 檔案。 需求分析 對於 excel 匯出,是一個很常見的需求。 最常見的解決方案就是使用 poi 直接同步匯出一個 excel 檔案。 客戶體驗 & 服務效能 客戶體驗 如果匯出的檔案比較大,比如幾十萬條資料,同步匯
如何避免記憶體洩漏、溢位的幾種常用方法
儘早釋放無用物件的引用。 好的辦法是使用臨時變數的時候,讓引用變數在退出活動域後自動設定為null,暗示垃圾收集器來收集該物件,防止發生記憶體洩露。 程式進行字串處理時,儘量避免使用String,而應使用StringBuffer。 因為每一個String物
tsync堆外記憶體溢位排查經過
一、發生得問題 tsync服務總是莫名得宕機,java程序被莫名其妙的消失了。 二、查詢問題 當時看了系統日誌: sudo -u admin dmesg|grep -A20 kill screenshot 發現是oom了,記憶體不足被系統kill掉了。 當時懷疑有可能是堆內記憶體溢位,
Angular JavaScript記憶體溢位問題 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)
方法一和方法二參考:https://www.cnblogs.com/liugang-vip/p/6857595.html 方法一:my-project/node_modules/.bin 下增大記憶體(請參考上方部落格) 方法二: 切換到 my-project/node_modules/.bin
關於記憶體溢位和記憶體洩漏的討論
什麼是記憶體洩漏? 程式的執行需要記憶體。只要程式提出要求,作業系統或者執行時(runtime)就必須供給記憶體。 不再用到的記憶體,沒有及時釋放,就叫做記憶體洩漏(memory leak),對於持續執行的服務程序(daemon),必須及時釋放不再用到的記憶體。否則,記
解決使用poi處理execl表格記憶體溢位問題
在平常的開發中會用到處理表格檔案的功能,poi就是一個非常優秀的處理表格的java框架,但是當表格檔案的資料量過大處理過程就會出現堆記憶體溢位的異常,讓人痛苦了兩天,最後在谷歌的幫助下找了一個解決方法,現在把這個方法分享出來希望可以幫助到大家!! import org.apache.poi.h
關於poi讀取execl2003表格出現記憶體溢位問題的解決方案
apache的poi是解析execl表格的java開源框架,上手比較的容易,因此受到大部分開發者的喜愛,但是在我做專案中出現了記憶體溢位的問題,網上找了很多的解決方法都不盡人意,因此通過自己想辦法解決了該問題!!現把之前記憶體溢位的程式碼和現在的優化後的程式碼放出來以供參考,注:我這是讀取execl
JVM之記憶體溢位的幾種情況以及可以採取的解決方案
開發中遇到過以下三種記憶體溢位的狀況: 一、 java.lang.OutOfMemoryError: Java heap space 二、 java.lang.OutOfMemoryError: PermGen space 三、 java.lang.OutO
python讀取mysql怎麼不會記憶體溢位
使用過java讀取mysql大資料量的人應該都知道,如果查詢時不開遊標不設定一次性區大小的話,會一次性的把所有記錄都拉取過來再進行後續操作,資料量一大就很容易出現OOM 如果用python去讀取mysql也會遇到同樣的問題 那麼這麼在python中來設定使用遊標呢 也很簡單 這裡
java虛擬機器(第二版) 第二章總結 (三)-手工復現java虛擬機器記憶體溢位(OutOfMemoryError異常)
文章概述 的java虛擬機器記憶體溢位的簡要概述,復現堆記憶體,棧記憶體,方法區的執行時常量池記憶體等區域的溢位情況,以及上述區域發生記憶體溢位的判斷方式和解決思路。 1,概述: IDE為eclipse,需要在執
記憶體溢位和記憶體洩漏的區別、產生原因以及解決方案【轉】
(轉自:https://www.cnblogs.com/Sharley/p/5285045.html) 記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就
本地直接記憶體溢位
DirectMemory容量可通過-xx:MaxDirectMemorySize指定,如果不指定,則預設與java懟最大值(-Xmx指定)一樣,下面的程式碼中越過了DirectByteBuffer類,直接通過反射獲取Unsafe例項進行記憶體分配(Usafe類的getUSafe()方法限制了