社区
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变量未定义的错误吗?为什么会发生这种情况?
...全文
73
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
的
垃圾回收
机制如何工作?如何优化
垃圾回收
性能?
Java
的
垃圾回收
(GC)机制是自动内存管理的一部分,它负责回收不再使用的对象,以便释放内存资源,避免内存泄漏。作为
Java
开发者,理解
垃圾回收
机制的工作原理,并学会如何优化
垃圾回收
性能,是提高
Java
程序运行效率的关键。本篇文章将详细讲解
Java
垃圾回收
机制的原理、工作流程,并提供一些优化建议,让你轻松应对GC相关的问题!🚀
垃圾回收
的目的是自动回收那些不再使用的对象的内存空间,从而释放内存资源。
Java
通过
垃圾回收
机制避免了内存泄漏的风险,也减轻了开发者的负担。
Java
垃圾回收
机制全解析
Java
的
垃圾回收
(GC)是一种自动内存管理机制,通过判断对象是否可达来确定回收对象。主要采用可达性分析算法,从GC Roots对象出发追踪引用链。JVM提供了三种基本回收算法:标记-清除(产生碎片)、标记-整理(消除碎片)和复制算法(高效但浪费空间)。实际应用中采用分代回收策略:新生代使用复制算法,老年代采用标记-清除或标记-整理。常见的
垃圾回收
器包括串行回收器、并行回收器、CMS(低延迟)和G1等,各自针对不同场景优化吞吐量或响应时间。GC过程可能引发STW(暂停所有用户线程)
java
1.8
垃圾回收
机制_
JAVA
垃圾回收
机制
目录:什么是垃圾怎么判定垃圾什么时候回收垃圾怎么回收
垃圾回收
器介绍1.什么是垃圾在JVM中,程序计数器、虚拟机栈、本地方法栈都是随线程生而生,随线程灭而灭(不需要管理);栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理(不需要管理);常说的
垃圾回收
主要集中在堆和方法区,这部分内存是随着程序运行动态分配的(回收对象,常量,类)。2.怎么判定垃圾2.1对象:产生位置:堆
Java
的自动内...
JAVA
垃圾回收
机制
通过自动
垃圾回收
算法对堆内存中 new出的且不再被引用的对象 进行回收
浅析
Java
垃圾回收
机制
在
Java
中,程序员不必像C++程序员那样需要自己手动的去释放一个对象的内存,而是由虚拟机自行执行。因为呀,
Java
开发人员认为:内存处理是编程人员最容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
Java
提供的 GC(
垃圾回收
) 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。值得注意的是,
Java
语言并没有提供释放已分配内存的显式操作方法,全看虚拟机的心情。
Java SE
62,628
社区成员
307,258
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章