java内存问题,欢迎高手进来探讨

Ark032425 2010-08-06 04:50:18
java内存溢出,到底是堆溢出还是栈溢出。虚拟机到底能用多少内存。
请给出有力证据。
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
salever 2010-08-06
  • 打赏
  • 举报
回复
补充一点:堆和栈的大小是可以设置的,CMD下java -Xms 、java -Xmx、java -Xss

-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
salever 2010-08-06
  • 打赏
  • 举报
回复
StackOverflowError 栈空间不足,JVM中,方法的执行用栈,当分配的占空间不足时,比如无限递归调用,就会出现这个错误(某也就遇到过无限递归调用时出现过栈空间问题)

OutOfMemoryError 堆空间不足,(忽略GC),堆是用来分配对象的地方,简单地说,new一个新的对象就发生在堆上,一般JVM的堆大小是可以设置的,默认好像是64M。如果你拼命new对象很快就会看到这个错误的。

举个例子:
static int callMyself(){
return callMyself();
}
运行这个方法,你会得到:
Exception in thread "main" java.lang.StackOverflowError

int[] a = new int[123456789];
运行时会出现:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

healer_kx 2010-08-06
  • 打赏
  • 举报
回复
Java的栈溢出,都是由于递归调用引发的,而Java的数组越界了,引发的out of boundary一类的异常,
如果你的对象new得过多了,那就是Out of Memory了。
JVM虚拟机能用多少堆内存,也得看硬件什么配置了。至于栈内存,大小无所谓了,反正再大也不过10MB,小了也得1-2MB。但是你程序的递归调用不对,100MB也不够玩的。
YangWenChaoX 2010-08-06
  • 打赏
  • 举报
回复
堆溢出 是怎样的?
栈溢出 又是怎样的?
michaellufhl 2010-08-06
  • 打赏
  • 举报
回复
StackOverflowError vs OutOfMemoryError
  • 打赏
  • 举报
回复
经常outofmemoryerror
knightzhuwei 2010-08-06
  • 打赏
  • 举报
回复
栈溢出和堆溢出应该都有可能吧 虚拟机能用多少内存不是应该可以设置的么

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧