編寫各種OutOfMemory & StackOverflow程式
自己編寫各種outofmemory,stackoverflow程式
HeapOutOfMemory
Young OutOfMemory
MethodArea OutOfMemory
ConstantPool OutOfMemory
DirectMemory OutOfMemory
Stack OutOfMemory Stack OverFlow
這是網上某篇稱為Java大牛中列出來的一條專案,下面進行簡單的自己的實現:
1、HeapOutOfMemory
堆溢位,情況多見於物件過多,存在多餘引用,不使用的物件未及時釋放。
package com.test;
import java.util.ArrayList;
/**
* Created by littlewolf on 11/1/2016.
*/
public class Demo {
public static void main(String[] args) throws Exception {
ArrayList<String> strs = new ArrayList<String>(100000000);
for ( int i = 0; i <= 100000000; i++ ) {
strs.add(Integer.toString(i));
if( i % 10000 == 0 ) {
System.out.println("i: " + i);
}
}
}
}
電腦風扇已經開始狂轉了~2、Young OutOfMemory
設定XX: MaxTenuringThreshold為一個很大的值,使物件無法及時移入到年老代中,導致年輕代記憶體溢位。
3、MethodArea OutOfMemory
在經常生成大量Class的應用中,需要特別注意類的回收狀況。這類場景除了使用CGLib位元組碼增強和動態語言之外,常見的還有:大量JSP或動態產生JSP檔案的應用(JSP第一次執行時,需要編譯成Java類)、基於OSGi的應用(即使是同一個類檔案,被不同的類載入器載入也會視為不同的類)等。
4、ConstantPool OutOfMemory
一般來說是不可能的,只有專案啟動方法區記憶體很小或者專案中的靜態變數及其多時才會發生。
5、DirectMemory OutOfMemory
堆外溢位一般與NIO有關。
package com.test;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
/**
* Created by littlewolf on 11/1/2016.
*/
public class Demo {
public static void main(String[] args) throws Exception {
List<ByteBuffer> buffers = new ArrayList<>();
while( true ) {
ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024 * 1024);
buffers.add(buffer);
}
}
}
6、StackOverflow
棧溢位一般與方法遞迴次數過多,或者方法中有產生大量資料的迴圈有關。
package com.test;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
/**
* Created by littlewolf on 11/1/2016.
*/
public class Demo {
public static void main(String[] args) throws Exception {
new Demo().mtd();
}
public void mtd() {
long time = System.currentTimeMillis();
mtd();
}
}
參考:點選開啟連結
相關文章
- 編寫一個程式實現模式串的各種模式匹配模式
- 使用Rust編寫的各種遊戲 - GameDev#28Rust遊戲GAMdev
- 程式猿的年終總結,各種版本各種殘
- 各種MySQL程式概述(轉)MySql
- 各種音訊視訊編碼方法音訊
- 面試題裡的那些各種手寫面試題
- 關於前端面試中常考的各種手寫程式碼題前端面試
- 各種程式場景下磁碟讀寫效能分析 -- 結合iostatiOS
- Mybatis中模糊查詢的各種寫法MyBatis
- Java程式編寫Java
- 編寫難於測試的程式碼的5種方式
- ***PHP各種編碼的漢字字串擷取PHP字串
- 各種字元編碼方式詳解及由來字元
- scala學習筆記:各種奇怪的寫法筆記
- 不寫程式碼不用 Excel, 如何輕鬆搞定各種圖形化展現Excel
- 各種程式設計視訊教程程式設計
- 我眼中的各種程式語言
- Zen Coding: 一種快速編寫HTML/CSS程式碼的方法HTMLCSS
- Sublime 編寫編譯 swift程式碼編譯Swift
- 各種富文字/ HTML編輯器和框架比較HTML框架
- 各種音視訊編解碼學習詳解
- Android.mk各種檔案編譯彙總Android編譯
- 各種流行的程式設計風格程式設計
- 各種程式設計實現的樹程式設計
- 漫畫:各種程式語言的困境
- oracle體系結構梳理----各種程式Oracle
- 提高 Java 程式碼效能的各種技巧Java
- Microsoft .NET框架糅合各種程式語言ROS框架
- 各種分割線Html程式碼(厲害)HTML
- C#練習,編寫一個擲篩子100次的程式,並列印出各種點數的出現次數。C#
- 各種加速
- PHP 編寫守護程式PHP
- 程式碼編寫提示配置
- Unix系列shell程式編寫
- 如何編寫MapReduce程式碼
- 桌面下雪程式的編寫
- Python編寫守護程式程式Python
- 各種資料庫的resin 連線池的寫法資料庫