Atu*_*tul 1 java memory stack-overflow
package com.atul;
public class StackOverFlow {
public StackOverFlow() {
callStackOverFlow();
}
public void callStackOverFlow() {
StackOverFlow st = new StackOverFlow();
}
public static void main(String[] args) {
StackOverFlow st2 = new StackOverFlow();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中我试图得到OutOfMemory错误,但我得到StackOverFlow错误.据我所知,所有对象都是在堆中创建的.这里我们用构造函数进行递归,但仍然得到StackOverFlow错误.
为什么?
在堆内存耗尽之前很久就会耗尽堆栈(对于简单情况,其最大深度大约为10,000).这是因为每个线程都有自己的堆栈,因此它必须比共享堆小很多.
如果您想耗尽内存,则需要更快地耗尽堆.
public class OutOfMemoryMain {
byte[] bytes = new byte[100*1024*1024];
OutOfMemoryMain main = new OutOfMemoryMain();
public static void main(String... args) {
new OutOfMemoryMain();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |