add sample about oom in heap and stack

add demo for deadlock
This commit is contained in:
Jason Lu 2025-02-24 20:14:08 +08:00
parent cf91027034
commit 5200a3471e
3 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,21 @@
package jvm.oom;
import java.util.ArrayList;
import java.util.List;
/**
* VM args: -Xmx20m -Xms20M -XX:+HeapDumpOnOutOfMemoryError
*/
public class HeapOOM {
static class OOMObject {
}
public static void main(String[] args) throws InterruptedException {
List<OOMObject> list = new ArrayList<>();
while (true) {
list.add(new OOMObject());
}
}
}

View File

@ -0,0 +1,24 @@
package jvm.oom;
/**
* VM Args: -Xss228k
*/
public class JavaVMStackSOF {
private int stackLength = 1;
public void stackLeak() {
stackLength++;
stackLeak();
}
public static void main(String[] args) {
JavaVMStackSOF sof = new JavaVMStackSOF();
try {
sof.stackLeak();
} catch (Throwable e) {
System.out.println("stack length: " + sof.stackLength);
throw e;
}
}
}

View File

@ -0,0 +1,39 @@
package threaddemo;
public class DeadlockDemo {
private static final Object resource1 = new Object();
private static final Object resource2 = new Object();
public static void main(String[] args) {
new Thread(() -> {
synchronized (resource1) {
System.out.println(STR."\{Thread.currentThread()}get resource1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(STR."\{Thread.currentThread()} waiting get resource2");
synchronized (resource2) {
System.out.println(STR."\{Thread.currentThread()} get resource2");
}
}
},"t1").start();
new Thread(() -> {
synchronized (resource2) {
System.out.println(Thread.currentThread() + "get resource2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread() + "waiting get resource1");
synchronized (resource1) {
System.out.println(Thread.currentThread() + "get resource1");
}
}
},"t2").start();
}
}