【问题标题】:Java inline object passed as parameter lifetime作为参数生命周期传递的 Java 内联对象
【发布时间】:2016-09-29 11:10:06
【问题描述】:

内联创建并传递给方法的对象的生命周期是多少? 例如:

myMethod(new String("Hello World"));

字符串“Hello World”是在 myMethod 执行后创建和销毁的,还是在垃圾收集器将其删除之前仍保留在内存中?

【问题讨论】:

    标签: java lifetime object-lifetime


    【解决方案1】:

    我很确定它只会存在于方法中,除非你将它分配给一个全局变量。

    【讨论】:

      【解决方案2】:

      JAVA 对字符串文字的处理方式不同。此处将在 字符串常量池 中创建值为“Hello World”的字符串对象。

      这个字面量在常量池中的生命周期将由 JVM 决定,这意味着 JVM 将决定何时将其收集为垃圾(就像常量池中没有更多内存,现在这个对象没有被任何引用引用) .

      但它不会在方法执行后立即销毁。

      您可以在此处找到有关字符串常量池的更多详细信息:http://www.thejavageek.com/2013/06/19/the-string-constant-pool/

      【讨论】:

      • 谢谢!那么,如果我从另一个方法获取 String 对象,它是否由字符串常量池管理?示例:myMethod(getKey());考虑“getKey()”一个返回密钥/密码的字符串表示的方法。
      • 在 JAVA 中,字符串文字是使用 " " 创建的,而字符串对象是使用 new 关键字创建的。字面量保存在字符串常量池中,对于字符串对象,在常量池中创建一个字面量,在堆中创建一个字面量,对象引用将指向堆中的对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      相关资源
      最近更新 更多