社区
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变量未定义的错误吗?为什么会发生这种情况?
...全文
60
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
-Interview:此项目为
Java
面试的汇总,多数是一些
Java
基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题
Java
知识点,继续完善中。 多数是一些
Java
基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题。 如果对你有帮助请点下 Star,有
疑问
欢迎提 ,有好的想法请提 。 常用集合 ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap
Java
多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock 实现原理 ConcurrentHashMap 的实现原理 线程池原理 深入理解线程通信 交替打印奇偶数 JVM
Java
运行时内存划分 类加载机制 OOM 分析
垃圾回收
对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存设计 分布式 ID 生成器 常用框架\
Java
-Interview:https
Java
知识点,继续完善中。 多数是一些
Java
基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题。 如果对你有帮助请点下 Star,有
疑问
欢迎提 ,有好的想法请提 。 常用集合 HashMap HashSet LinkedHashMap
Java
多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock 实现原理 ConcurrentHashMap 的实现原理 线程池原理 深入理解线程通信 交替打印奇偶数 JVM
Java
运行时内存划分 类加载机制 OOM 分析
垃圾回收
对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存设计 分布式 ID 生成器 常用框架\第三方组件 Spring Bean 生命周期 Sprin
java
-interview
Java
知识点,继续完善中。 多数是一些
Java
基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题。 如果对你有帮助请点下 Star,有
疑问
欢迎提 ,有好的想法请提 。 常用集合 ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap
Java
多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock 实现原理 ConcurrentHashMap 的实现原理 线程池原理 深入理解线程通信 交替打印奇偶数 JVM
Java
运行时内存划分 类加载机制 OOM 分析
垃圾回收
对象的创建与内存分配 你应该知道的 volatile 关键字 分布式相关 分布式限流 基于 Redis 的分布式锁 分布式缓存设计 分布式 ID 生成器 常用框架\
JAVA
垃圾回收
机制
通过自动
垃圾回收
算法对堆内存中 new出的且不再被引用的对象 进行回收
浅析
Java
垃圾回收
机制
在
Java
中,程序员不必像C++程序员那样需要自己手动的去释放一个对象的内存,而是由虚拟机自行执行。因为呀,
Java
开发人员认为:内存处理是编程人员最容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
Java
提供的 GC(
垃圾回收
) 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。值得注意的是,
Java
语言并没有提供释放已分配内存的显式操作方法,全看虚拟机的心情。
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章