社区
Java SE
帖子详情
java垃圾回收的疑问
KnowGis
2009-02-15 11:00:28
小弟刚开始学java,碰到一个垃圾回收的疑问
int x[];
x=new int[100];
x[0]=1;
x=null;
这时如果用System.out.println(x)打印的话,会报空指针的错误,说明到这里x应该被回收了,可是如果再加一句
x=new int[2];
编译器却能通过。x不是被回收了吗?不是应该报x变量未定义的错误吗?为什么会发生这种情况?
...全文
94
4
打赏
收藏
java垃圾回收的疑问
小弟刚开始学java,碰到一个垃圾回收的疑问 int x[]; x=new int[100]; x[0]=1; x=null; 这时如果用System.out.println(x)打印的话,会报空指针的错误,说明到这里x应该被回收了,可是如果再加一句 x=new int[2]; 编译器却能通过。x不是被回收了吗?不是应该报x变量未定义的错误吗?为什么会发生这种情况?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mengweilil
2009-02-16
打赏
举报
回复
x类似于c当中的指针
垃圾回收只会回收指针所指的区域,不会连指针一起喀嚓掉。
int x[];定义一个指针
x=new int[100];创建一个内存块,让指针指向这里
x[0]=1;对那个内存块内容赋值
x=null; 指针指向null(不指向任何地方),那个创建的内存块由于没有引用(没任何指针指着它),所以可能会被垃圾回收机制回收掉,也可能不会被回收——jvm的定义,并没有要求垃圾回收机制一定做什么。
Asinzy
2009-02-15
打赏
举报
回复
楼上说的对X[]保存在栈内存,而new出来的对象保存在堆内存,栈内存的东西,在程序结束后消失(或者出了{}就消失),显然你的程序还没有结束之前你加一句x=new int[2]; 是完全可以的。
垃圾回收指的是系统自动回收堆内存的没有任何东西指向它那些对象,这种自动清理也不一定就是立刻清理。
lxsyd
2009-02-15
打赏
举报
回复
java的垃圾回收机制是需要一定时间的,所以会有一定的滞后性的,至于你说的问题,java回收的是堆内的没有指向它的内存,而x是在栈上分配的,所以不会被回收的。
cocy_chan
2009-02-15
打赏
举报
回复
int x[];
x=new int[100];
x[0]=1;
x=null;
System.out.println(x)语句并不会报错啊。
此时只有用x里的对象是才会报错。
如:System.out.println(x[0]);
关于
java
垃圾回收
的一个
疑问
public class Test { public static void main(String[] args) { A a = new A(); B b = a.getB(); a = null; // 对象a能否回收? while (true) { b.newObject(); } // ... } }
【TIJ】
JAVA
垃圾回收
和finalize()
JAVA
的
垃圾回收
机制是不是可以这么理解: (1)对象所占用的内存空间(通常是经由new创建,在堆中),是由
垃圾回收
器负责回收;但是这种回收并不一定会发生,
JAVA
中的对象并不一定会被销毁;内存空间如果没用完,
垃圾回收
也许永远不会执行。 gc是有触发条件的,当一个小对象准备要在新生代被创建的时候,如果这时发现新生代满了,那么会触发一次minor gc。老年代类似,只不过触发的是full gc
JVM原理及调优(二)----垃圾收集器
一、概述 说起
java
人们总会想到它的垃圾收集器,从
java
诞生以来,GC就是它的伴生产物。对于GC我一直有几个
疑问
,那就是:1、哪些内存是需要被回收的?2、是在什么时候会被回收 ?3、是通过怎么样的机制进行回收?带着这些问题,深入的去学习。 二、对象和类的的生命周期 2.1、
java
对象的生命周期
java
对象在JVM的生命周期有: 1、创建(created): 对象通过 new、反射、clon...
关于
垃圾回收
我首先思考的是,
垃圾回收
(GC)的必要。 考虑有三个指针a,b,c都指向同一个对象。如果允许执行:delete c;那么a和b将成为悬浮指针。这就容易导致一些程序错误发生。 因此,
java
需要GC,首要的原因就是安全性。正是由于安全性的问题导致GC的出现。 GC在技术上的实现,目前我尚不清楚。一个主要疑惑是:对象句柄可能存在于方法区,存在于成员变量,存在于栈中;如果要搜索所有这些地方,
java
bytebuffer分包收集,
Java
DirectByteBuffer包装垃圾是否被收集?
I understand that when a directbytebuffer is allocated, its not subject to garbage collection, but what I'm wondering is if the wrapping object is garbage collected.For example, if I allocated a new D...
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章