社区
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变量未定义的错误吗?为什么会发生这种情况?
...全文
62
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
作业
写回复
配置赞助广告
用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
-Interview:https
垃圾回收
对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存设计 分布式 ID 生成器 常用框架\第三方组件 Spring Bean 生命周期 Sprin
java
-interview
Java
知识点,继续完善中。 多数是一些
Java
基础知识、底层...
垃圾回收
对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存设计 分布式 ID 生成器 常用框架\
Java
的
垃圾回收
机制如何工作?如何优化
垃圾回收
性能?
本篇文章将详细讲解
Java
垃圾回收
机制的原理、工作流程,并提供一些优化建议,让你轻松应对GC相关的问题!
垃圾回收
的目的是自动回收那些不再使用的对象的内存空间,从而释放内存资源。
Java
通过
垃圾回收
机制避免了内存...
java
1.8
垃圾回收
机制_
JAVA
垃圾回收
机制
目录:什么是垃圾怎么判定垃圾什么时候回收垃圾怎么回收
垃圾回收
器介绍1.什么是垃圾在JVM中,程序计数器、虚拟机栈、本地方法栈都是随线程生而生,随线程灭而灭(不需要管理);栈帧随着方法的进入和退出做入栈和出栈...
JAVA
垃圾回收
机制
通过自动
垃圾回收
算法对堆内存中 new出的且不再被引用的对象 进行回收
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章