add sample about oom in heap and stack
add demo for deadlock
This commit is contained in:
parent
cf91027034
commit
5200a3471e
21
src/main/java/jvm/oom/HeapOOM.java
Normal file
21
src/main/java/jvm/oom/HeapOOM.java
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
24
src/main/java/jvm/oom/JavaVMStackSOF.java
Normal file
24
src/main/java/jvm/oom/JavaVMStackSOF.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
src/main/java/threaddemo/DeadlockDemo.java
Normal file
39
src/main/java/threaddemo/DeadlockDemo.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user