Notice
Recent Posts
Recent Comments
Link
SeouliteLab
[Java/자바] 강제적으로 OutOfMemoryError 발생시키기 본문
Java에서 OutOfMemoryError를 강제로 발생시키는 방법을 살펴보겠습니다. 이 글에서는 여러 예제를 통해 자세한 설명과 함께 제시하겠습니다.
예제 1: 메모리 누수를 통한 OutOfMemoryError 발생
import java.util.ArrayList;
import java.util.List;
public class MemoryLeak {
private static List<byte[]> list = new ArrayList<>();
public static void main(String[] args) {
while (true) {
list.add(new byte[1024 * 1024]); // 1MB씩 계속 리스트에 추가하여 메모리 누수 발생
}
}
}
이 코드는 무한히 리스트에 1MB의 바이트 배열을 추가하여 메모리 누수를 유발합니다.
예제 2: 대용량 데이터 생성하여 OutOfMemoryError 발생
import java.util.ArrayList;
import java.util.List;
public class LargeData {
public static void main(String[] args) {
List<String> largeList = new ArrayList<>();
while (true) {
largeList.add(new String(new char[1000000])); // 1MB의 문자열을 계속 리스트에 추가하여 메모리 초과 발생
}
}
}
이 예제는 1MB 크기의 문자열을 리스트에 계속 추가하여 메모리를 소비하고, 결국 OutOfMemoryError를 유발합니다.
예제 3: 큰 배열 할당으로 OutOfMemoryError 발생
public class BigArray {
public static void main(String[] args) {
int[] bigArray = new int[Integer.MAX_VALUE]; // Integer.MAX_VALUE 크기의 배열 할당
}
}
이 코드는 매우 큰 크기의 배열을 할당하여 메모리 부족 상태를 유도합니다.
예제 4: 재귀 호출로 StackOverflowError 발생시켜 OutOfMemoryError 유도
public class StackOverflow {
public static void main(String[] args) {
infiniteRecursion(0);
}
public static void infiniteRecursion(int i) {
System.out.println(i);
infiniteRecursion(i + 1); // 재귀 호출로 인해 호출 스택이 계속 쌓이다가 스택 오버플로우 발생
}
}
이 코드는 무한한 재귀 호출을 수행하여 호출 스택이 오버플로우되어 OutOfMemoryError를 발생시킵니다.
예제 5: 메모리 사용량 측정하여 한계 도달시 OutOfMemoryError 발생
import java.util.ArrayList;
import java.util.List;
public class MemoryLimit {
public static void main(String[] args) {
long maxMemory = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxMemory);
List<byte[]> list = new ArrayList<>();
long usedMemory = 0;
try {
while (true) {
list.add(new byte[1024 * 1024]); // 1MB씩 리스트에 추가
usedMemory += 1024 * 1024;
if (usedMemory >= maxMemory) {
throw new OutOfMemoryError("메모리 한계 도달"); // 메모리 한계 도달시 예외 발생
}
}
} catch (OutOfMemoryError e) {
System.err.println(e.getMessage());
}
}
}
이 코드는 메모리 사용량을 측정하고 한계에 도달할 때까지 메모리를 추가로 할당하다가, 한계에 도달하면 OutOfMemoryError를 발생시킵니다.
예제 6: 유효하지 않은 메모리 설정으로 OutOfMemoryError 유도
public class InvalidMemoryConfig {
public static void main(String[] args) {
int[] array = new int[-1]; // 음수 크기의 배열 할당
}
}
이 코드는 유효하지 않은 메모리 설정으로 인해 Out OfMemoryError를 발생시킵니다.
'프로그래밍' 카테고리의 다른 글
[Java/자바] 임시 폴더(Temp directory) 경로 가져오기 (0) | 2024.03.10 |
---|---|
[Java/자바] 배열의 깊은 복사 (Deep copy) 예제 (0) | 2024.03.10 |
[Java/자바] Java 10 - var 키워드로 변수 선언 (지역 변수 타입 추론하기) (0) | 2024.03.10 |
[Java/자바] 파일 소유자 이름 확인 (0) | 2024.03.10 |
[Java/자바] 파일 읽기, 쓰기 권한 설정 방법 (0) | 2024.03.10 |