Идея проста: создайте объект, содержащий 1 МБ байт, добавьте его в Список
и повторяйте процесс создания и добавления, пока JVM не выбросит OutOfMemoryError
.
while (true) { // 1MB each loop, 1 x 1024 x 1024 = 1048576 byte[] b = new byte[1048576]; list.add(b); }
1. java.язык. Ошибка из памяти: Пространство кучи Java
Приведенный ниже пример Java будет выполняться некоторое время и выбрасывает java.lang. Ошибка памяти
.
package com.mkyong; import java.util.ArrayList; import java.util.List; public class JavaEatMemory { public static void main(String[] args) { Listlist = new ArrayList<>(); int index = 1; while (true) { // 1MB each loop, 1 x 1024 x 1024 = 1048576 byte[] b = new byte[1048576]; list.add(b); Runtime rt = Runtime.getRuntime(); System.out.printf("[%d] free memory: %s%n", index++, rt.freeMemory()); } } }
Выход
[2037] free memory: 7633504 [2038] free memory: 5536352 [2039] free memory: 3439104 [2040] free memory: 1573072 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.mkyong.JavaEatMemory.main(JavaEatMemory.java:20)
Рекомендации
- Oracle Java 11 – Эргономика
- Узнайте размер вашей памяти кучи Java
Оригинал: “https://mkyong.com/java/how-to-simulate-java-lang-outofmemoryerror-in-java/”