編寫各種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
- 關於前端面試中常考的各種手寫程式碼題前端面試
- Stackoverflow 2022年調查結果簡編
- Java程式編寫Java
- 面試題裡的那些各種手寫面試題
- 不寫程式碼不用 Excel, 如何輕鬆搞定各種圖形化展現Excel
- stackoverflow
- [20191218]各種編輯器的退出操作.txt
- C#練習,編寫一個擲篩子100次的程式,並列印出各種點數的出現次數。C#
- Python編寫守護程式程式Python
- Sublime 編寫編譯 swift程式碼編譯Swift
- 各種流行的程式設計風格程式設計
- 各種富文字/ HTML編輯器和框架比較HTML框架
- 在.net中讀寫config檔案的各種方法
- PHP 編寫守護程式PHP
- Python編寫shellcode注入程式Python
- 換一種方式編寫 Spring MVC 介面SpringMVC
- 各種加速
- 編寫可維護的程式碼是一種溝通技巧 - Max Chernyak
- 解讀C#程式設計中最容易忽略7種編寫習慣!C#程式設計
- 小程式各種姿勢實現登入
- 各種各樣的映象加速
- JVM學習筆記(3)---OutOfMemory詳解JVM筆記
- 使用Python編寫猜拳小程式Python
- 編寫可擴充套件程式套件
- Hbuilder快速程式碼編寫技巧UI
- Model 編寫程式碼智慧提醒
- PHP 編寫基本的 Socket 程式PHP
- 02 | 編寫Model層程式碼
- 【IDL〕編寫程式啟動介面
- vue3程式碼編寫Vue
- 編寫第一個Qt程式QT
- css中四種頁面編寫樣式CSS
- PraisonAI :簡化各種大模型應用的建立和編排AI大模型
- Linux查各種Linux
- 各種主義
- stream流各種
- 在VS2019使用MASM編寫彙編程式ASM
- 如何編寫高效的Android程式碼Android