首页 > 其他 > 详细

JVM StackOverflowError vs. OutOfMemoryError

时间:2016-08-27 00:26:34      阅读:212      评论:0      收藏:0      [点我收藏+]

 

if the computation in a thread needs a larger Java Virtual Machine stack than is permitted, the Java Virtual Machine throws a StackOverflowError;

 

if Java Virtual Machine stacks can be dynamically expanded, and expansion is attempted but insufficient memory can be made available to effect the expansion, or if insufficient memory can be made available to create the initial Java Virtual Memory stack for a new thread, the Java Virtual Machine throws an OutOfMemoryError.

 

Example of StackOverflowError: limit the size of a thread‘s stack size and the do a deep recursion

 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         new Thread(null, new Runnable() {
 5             public void run() {
 6                 {
 7                     System.out.println(fact(1<<15));
 8                 }
 9             }
10             private long fact(int n) {
11                 return n < 2 ? 1 : n * fact(n-1);
12             }
13         }, "thread", 1<<20).start();
14     }
15 }

 

Example of OutOfMemoryError: limit -Xmx and create large objects (like using StringBuilder)

 1 public class Main2 {
 2 
 3     public static void main(String[] args) {
 4         new Thread(null, () -> {
 5             {
 6                 StringBuilder builder = new StringBuilder();
 7                 for (int cnt = 0; cnt < 100000000; cnt++) {
 8                     builder.append(cnt);
 9                 }
10 
11                 try {
12                     Thread.sleep(15000000);
13                 } catch (InterruptedException e) {
14                     e.printStackTrace();
15                 }
16             }
17         }, "thread", 1 << 20).start();
18     }
19 }

 

JVM StackOverflowError vs. OutOfMemoryError

原文:http://www.cnblogs.com/qsort/p/5811938.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!