当前位置: 首页 > 知识库问答 >
问题:

主方法参数是否符合垃圾回收机制?

洪飞驰
2023-03-14

在main()方法结束之前,有多少对象可以进行垃圾收集?

class Test {
    public static void main(String[] args) {
        String[] stringArray = new String[1];
        int[] intArray = new int[1];
        stringArray = null;
        intArray = null;
    }
}

问题的答案是“stringArray和intArray有资格进行垃圾收集”,但也有“args”数组应该有资格进行垃圾收集。答案应该是“stringArray、intArray和args”,但我不确定。

args param是否符合垃圾收集的条件,并且可以在列表中计数?

共有3个答案

郑乐池
2023-03-14

更正stringArrayintArray是存储在堆栈中而不是堆内存中的引用变量,因此它们不符合垃圾收集的条件,而不是这些引用变量指向的对象将符合垃圾收集的条件。

String[]args只要它在函数范围内,就不会被垃圾收集。一旦main(String[]args)从函数堆栈中取出,那么args指向的数组对象将有资格被垃圾收集。

太叔坚
2023-03-14

Java中的数组是对象,它们将驻留在程序的堆段中。只要main运行,args(驻留在堆栈框架中)就会指向它,因此不会被垃圾收集。一旦main存在,它的堆栈框架就会弹出。现在,args数组将被GCed。

钮誉
2023-03-14

关键信息和往常一样在问题中。“在main()结束之前”-重要的部分是您仍然在main中,args仍然在作用域中,因此不能被垃圾收集。

 类似资料:
  • 本文向大家介绍Python垃圾回收机制?相关面试题,主要包含被问及Python垃圾回收机制?时的应答技巧和注意事项,需要的朋友参考一下 引用计数 标记清除 分代回收  

  • 在约瑟夫·阿尔巴哈里(Joseph Albahari)的《C#5.0简言之》一书中,我发现了这一点 然而,根据加州大学伯克利分校的这堂课,只要堆栈上存在对该对象的引用,它就不会被垃圾收集。我的理解是,在方法返回之前,变量将保留在堆栈上。这意味着它引用的任何对象在方法返回之前都是活动的。 这是书中的错误还是java和。net垃圾收集工作有什么不同?

  • 主要内容:总结通过前几节对可利用空间表进行动态存储管理的介绍,运行机制可以概括为: 当用户发出申请空间的请求后,系统向用户分配内存;用户运行结束释放存储空间后,系统回收内存。这两部操作都是在用户给出明确的指令后,系统对存储空间进行有效地分配和回收。 但是在实际使用过程中,有时会因为用户申请了空间,但是在使用完成后没有向系统发出释放的指令,导致存储空间既没有被使用也没有被回收,变为了 无用单元或者会产生 悬挂访问

  • Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。 1 引用计数 PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象

  • 本文向大家介绍JS的垃圾回收机制?相关面试题,主要包含被问及JS的垃圾回收机制?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: GC(garbage collection),GC执行时,中断代码,停止其他操作,遍历所有对象,对于不可访问的对象进行回收,在V8引擎中使用两种优化方法, 分代回收,2、增量GC,目的是通过对象的使用频率,存在时长来区分新生代和老生代对象,多回收新生代区,少回收老

  • 垃圾回收 我们对生产中花了很多时间来调整垃圾回收。垃圾回收的关注点与Java大致相似,尽管一些惯用的Scala代码比起惯用的Java代码会容易产生更多(短暂的)垃圾——函数式风格的副产品。Hotspot的分代垃圾收集通常使这不成问题,因为短暂的(short-lived)垃圾在大多情形下会被有效的释放掉。 在谈GC调优话题前,先看看这个Attila的报告,它阐述了我们在GC方面的一些经验。 Scal