黑马程序员技术交流社区
标题:
java有垃圾回收机制,为什么还会出现内存溢出
[打印本页]
作者:
曾欢欢
时间:
2014-5-7 08:46
标题:
java有垃圾回收机制,为什么还会出现内存溢出
如何解决这个问题?
作者:
满兴旺
时间:
2014-5-7 09:03
本帖最后由 满兴旺 于 2014-5-7 09:09 编辑
个人感觉,两码事,这就和你每天都吃饭,然后上厕所,但只要你拼命吃,同样会吃撑一个道理
作者:
吉大人
时间:
2014-5-7 09:44
同学你好!在java程序运行过程中,一个垃圾回收器会不定时地被唤起检查是否有不再被使用的对象,并释放它们占用的内存空间。垃圾回收器的启用不由程序员控制,也无规律可循,并不会一产生垃圾,它就会被唤起,甚至有可能到程序终止,它都没有启动的机会。因此这不是一个很可靠的机制,这也许不是件坏事,因为垃圾回收器会给系统资源带来额外的负担。
至于你说的内存溢出有很多的情况,如果是你在编写代码时不遵循语法规则同样会产生溢出,比如在定义二维数组的时候,你编写的代码中没有及时的设置好数组的上限和下限这样就会引起内存的溢出,所以这两种机制是完全不同,不知道我说的这些你是否能够明白?
作者:
莫问纷飞
时间:
2014-5-7 12:55
system类里面有一个gc()方法,运行垃圾回收器,调用这个方法垃圾回收器不一定会执行。
执行java程序,配置文件中有的写着
java –Xms100M –Xmx200M HelloWorld
执行程序所需要的最小内存是100M,最大内存是200M,如果当前系统的内存远大于这个要求,执行垃圾回收没意义,如果执行会占用cpu的,影响效率。只有当系统的内存不满足于这个要求的时候才执行垃圾回收。
所以不能通过写代码来干预垃圾回收,可以通过设置参数。
所以写代码多加一些健壮性的判断,逻辑严谨一点就能避免
作者:
luoyang316
时间:
2014-5-7 21:34
一路解释的好经典
作者:
寻找人生目标
时间:
2014-5-7 22:42
垃圾回收器是不定期的回收的具体的看下这个 挺详细
[url=JAVA_堆内存与栈内存的区别
http://bbs.itheima.com/thread-41735-1-1.html
]JAVA_堆内存与栈内存的区别[/url]
作者:
满兴旺
时间:
2014-5-7 22:46
luoyang316 发表于 2014-5-7 21:34
一路解释的好经典
交个朋友
作者:
lvc
时间:
2014-5-7 23:20
解释得经典
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2