当前位置:编程学习 > JAVA >>

java垃圾回收

java中有垃圾回收机制,那么为什么还会出现内存溢出现象,什么时候会出现呢。 --------------------编程问答-------------------- 使用static 的容器 然后一直往容器内存放对象,没有手动销毁。

--------------------编程问答-------------------- 另一种情况:
创建一个大于可用内存的对象, 比如创建个超大的数组:
int[] ints = new int[1024*1024*1024*3]; --------------------编程问答-------------------- 是因为内存管理涉及的情况比较复杂了,Java虚拟机还不能智能化到能考虑所有的情况。而且楼主说的情况应该是内存泄露,内存溢出跟你的计算机内存有关,即计算机无法满足你想要分配的内存。 --------------------编程问答--------------------     所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。
    java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。
--------------------编程问答-------------------- 垃圾回收是回收了那些确定以后不会用到的。
比如
String a="abc";

String a="bcd";
这样第一个abc就符合垃圾回收条件了。。
你来上一个死循环
比如
while(true){
String a="abc";
}
这样的肯定容易死循环了
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,