1. OOM场景分析
测试oom使用的类
package com.concurrency.thread;
import com.concurrency.MyFixSizeThreadPool;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 使用jvm参数指定最大堆内存: 10M
* -Xmx10m
*/
public class TestThreadLocalOOM {
ThreadLocal<List<byte[]>> threadLocal = ThreadLocal.withInitial(() -> new ArrayList<>());
AtomicInteger maxThreadCount = new AtomicInteger();
volatile boolean isStop = false;
Runnable runnable = () -> {
// 每次增加2M
try{
threadLocal.get().add(new byte[1 * 1024 * 1024]);
}catch (OutOfMemoryError err) {
err.printStackTrace();
isStop = true;
}
int index = maxThreadCount.addAndGet(1);
System.out.println("thread index: " + index + "..." + Thread.currentThread() + "...size=" + threadLocal.get().size());
};
Runnable runWithRemove = () -> {
// 每次增加2M
threadLocal.get().add(new byte[1 * 1024 * 1024]);
int index = maxThreadCount.addAndGet(1);
System.out.println("thread index: " + index + "..."