【发布时间】:2016-09-29 11:10:06
【问题描述】:
内联创建并传递给方法的对象的生命周期是多少? 例如:
myMethod(new String("Hello World"));
字符串“Hello World”是在 myMethod 执行后创建和销毁的,还是在垃圾收集器将其删除之前仍保留在内存中?
【问题讨论】:
标签: java lifetime object-lifetime
内联创建并传递给方法的对象的生命周期是多少? 例如:
myMethod(new String("Hello World"));
字符串“Hello World”是在 myMethod 执行后创建和销毁的,还是在垃圾收集器将其删除之前仍保留在内存中?
【问题讨论】:
标签: java lifetime object-lifetime
我很确定它只会存在于方法中,除非你将它分配给一个全局变量。
【讨论】:
JAVA 对字符串文字的处理方式不同。此处将在 字符串常量池 中创建值为“Hello World”的字符串对象。
这个字面量在常量池中的生命周期将由 JVM 决定,这意味着 JVM 将决定何时将其收集为垃圾(就像常量池中没有更多内存,现在这个对象没有被任何引用引用) .
但它不会在方法执行后立即销毁。
您可以在此处找到有关字符串常量池的更多详细信息:http://www.thejavageek.com/2013/06/19/the-string-constant-pool/
【讨论】: