11. ECLIPSE MAT
The Eclipse Memory Analyzer is a fast
and feature-rich Java heap analyzer
that helps you find memory leaks and
reduce memory consumption.
http://www.eclipse.org/mat/
12. STACK DUMP
$ jstack -l 5722
<...shows you full stack trace...>
Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x00007fa7dd004ab0 (object
0x00000007ef2b1020, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x00007fa7dd007360 (object
0x00000007ef2b1030, a java.lang.Object),
which is held by "Thread-1"
14. GarbageCollection.java
/**
* GarbageCollection.java
* Copyright (c) 2008 by Dr. Herong Yang, http://www.herongyang.com/
*/
class GarbageCollection {
public static void main(String[] a) {
int max = 10000;
int min = 16;
Object[] arr = new Object[min];
Runtime rt = Runtime.getRuntime();
System.out.println("Free/total memory:");
for (int m=0; m<max; m++) {
for (int n=0; n<min-1; n++) arr[min-n-1] = arr[min-n-2];
arr[0] = getOneMega();
System.out.println(rt.freeMemory()+" "+rt.totalMemory());
try {
Thread.sleep(1000/10);
} catch (InterruptedException e) {
15. SimpleDeadLock.java
/**
* SimpleDeadLock.java
* Copyright (c) 2008 by Dr. Herong Yang, http://www.herongyang.com/
*/
import java.util.*;
public class SimpleDeadLock extends Thread {
public static Object l1 = new Object();
public static Object l2 = new Object();
private int index;
public static void main(String[] a) {
Thread t1 = new Thread1();
Thread t2 = new Thread2();
t1.start();
t2.start();
}
private static class Thread1 extends Thread {
public void run() {
synchronized (l1) {