关于Java内存释放 如题,如果在 一个方法里,new了几个对象,在该方法里,这些对象没有被方法外的引用所指向

那么java在执行完这个方法后,这些对象是否就全部失去引用,可待GC回收了?ps:这些对象都只在方法内被引用和使用.没有方法外的引用指向它们... 那么java 在执行完这个方法后, 这些对象是否就全部失去引用, 可待GC回收了?
ps : 这些对象都只在方法内被引用和使用.没有方法外的引用指向它们
展开
 我来答
百度网友3063114a7
2013-04-17 · TA获得超过693个赞
知道小有建树答主
回答量:666
采纳率:85%
帮助的人:230万
展开全部
1 首先, java的GC设计的目的是让开发者不关心什么时候回收,什么时候释放内存,这样开发者就可以专心做自己该做的事情。所以,开发者不应该在真正的代码中依赖垃圾回收行为。
2 仅在原理角度, 回答你的问题。
A a = new A(); 说明发生了两件事
1 A对象的一个实例在heap中被创建,占用了内存。
2 一个局部引用a被压栈,指向了1中的实例

在aaa()方法退出后, 引用a被弹出栈,这样1中的实例就没有指向它的引用, 成为了被GC回收的潜在目标。(只是从你给的例子的表面推断)
至于什么时候回收,是JVM的行为,不同版本和实现都可能存在差异。
小童鞋_成er
推荐于2017-11-25 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
您好,提问者:
在执行的时候,你这些对象虽然没有添加东西,但是还是会创建一个引用地址。
1、让对象是用完后指向null。
2、最后写入System.gc();//通知JVM执行垃圾回收,但是至于什么时候执行,这不是程序员所能控制的。
如果在方法内的话,就是在这个方法内生效的,但是如果是static那就成了全局的了。
追问
public void aaa(){
A a = new A();
//以下为使用A的代码, 省略
...
}

我想知道, 此方法过后. new A() 这个对象, 是否就会失去引用?
还是说. A a 这个引用, 在此方法执行完后,不会消失, 还对 new A()有指向?
还是说, A a 这个引用,在此方法执行完后, 暂不会消失, 要待GC执行,把 A a回收了. new A()才真正的失去引用指向?. 才能被GC回收?
追答
会丢失,但是什么时候执行GC回收,我们是不知道的。
你new完后,不可能GC直接回收的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
严肃的甲道士
2013-04-17 · 传播技术传播爱,笔芯❤️
严肃的甲道士
采纳数:337 获赞数:619

向TA提问 私信TA
展开全部
1、方法体内的变量是有生命周期的,在{处就死了,不管有没有被引用都会在堆中分配内存空间也会有一个栈中的空指引如一楼
2、GC有两种回收机制,其中有一种叫做标记回收,就是对死亡的对象进行标注,当堆(有三级储存结构)中的eden区满时就会大范围gc()回收内存,被标记的内存空间会被优先选用
你参考一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式