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