這裡用最簡單的記憶體溢出的錯誤來測試:
/**
* 測試JAVA的記憶體溢出問題
*/
public class MemoryDemo {
private static final Logger logger = LoggerFactory.getLogger(MemoryDemo.class);
private int index = 1;
public void method(){
index++;
//嵌套方法
method();
}
@Test
public void test(){
try {
method();
} catch (StackOverflowError e) {
System.out.println("程式所需要的棧大小 > 允許最大的棧大小,執行深度: " + index);
logger.error(e.toString());
logger.error(e.getMessage());
logger.error("調用method方法出錯",e);
}
}
}
那麼這三種方法:
1、logger.error(e.toString());
程式所需要的棧大小 > 允許最大的棧大小,執行深度: 18898
16:07:40.490 [main] ERROR com.memory.MemoryDemo - java.lang.StackOverflowError
2、logger.error(e.getMessage());
程式所需要的棧大小 > 允許最大的棧大小,執行深度: 18670
16:08:17.131 [main] ERROR com.memory.MemoryDemo - null
3、logger.error(“調用method方法出錯”,e);
程式所需要的棧大小 > 允許最大的棧大小,執行深度: 18510
16:09:08.457 [main] ERROR com.memory.MemoryDemo - 調用method方法出錯
java.lang.StackOverflowError: null
at com.memory.MemoryDemo.method(MemoryDemo.java:19) ~[classes/:na]
at com.memory.MemoryDemo.method(MemoryDemo.java:19) ~[classes/:na]
at com.memory.MemoryDemo.method(MemoryDemo.java:19) ~[classes/:na]
at com.memory.MemoryDemo.method(MemoryDemo.java:19) ~[classes/:na]
at com.memory.MemoryDemo.method(MemoryDemo.java:19) ~[classes/:na]