在C中,我可以通过以下小程序消耗堆栈内存区域(我的Mac中的堆栈大小限制为8MB)
int main(int argc, const char **argv) {
int a[1024*1024*2];
long size = sizeof(a);
return 0;
}
由于数组java也是一个对象,因此它的元素存储在堆中 . 根据Oracle's doc,Mac中的默认线程堆栈大小为512KB . 有没有程序可以耗尽堆栈大小?
在C中,我可以通过以下小程序消耗堆栈内存区域(我的Mac中的堆栈大小限制为8MB)
int main(int argc, const char **argv) {
int a[1024*1024*2];
long size = sizeof(a);
return 0;
}
由于数组java也是一个对象,因此它的元素存储在堆中 . 根据Oracle's doc,Mac中的默认线程堆栈大小为512KB . 有没有程序可以耗尽堆栈大小?
1 回答
堆栈值仅存在于它们创建的函数范围内 . 一旦返回,它们将被丢弃 .
现在Java只在栈上存储原语 .
所以他们只能排出堆栈就是创建基元 . 在这是
recursive method
然后我猜你可以在StackOverflowError之前观察到一些消耗 .