java堆栈和方法返回的对象

java堆栈和方法返回的对象,java,garbage-collection,Java,Garbage Collection,声明 rs.getString("name") //rs is java.sql.ResultSet interface 字节码是: 41: aload 4 43: ldc #10; //String name 45: invokeinterface #11, 2; //InterfaceMethod java/sql/ResultSet.getString:(Ljava/lang/String;)Ljava/lang/String; 50: pop 在第45行,通过

声明

rs.getString("name")  //rs is java.sql.ResultSet interface
字节码是:

41:  aload   4
43:  ldc     #10; //String name
45:  invokeinterface #11,  2; //InterfaceMethod java/sql/ResultSet.getString:(Ljava/lang/String;)Ljava/lang/String;
50:  pop
在第45行,通过
rs返回字符串对象。getString(“name”)
被推到堆栈上,在第50行,返回对象(字符串对象)弹出

1) 堆栈是否只包含对这个返回的字符串对象的引用以及堆上的实际对象,或者堆栈是否包含实际的字符串对象

2) 在弹出返回的字符串对象后,它会被垃圾收集还是在这个方法的堆栈消失时被释放内存

在第45行,rs.getString(“name”)返回的string对象被推送到堆栈上

没有返回字符串对象。有一个返回的字符串引用

至少在概念上,对象永远不会在堆栈上,永远不会返回,永远不会传递。这只是一个参考

在弹出返回的string对象后,它会被垃圾收集还是在该方法的堆栈消失时被释放内存

当堆栈弹出时,引用将被清除,这意味着如果没有其他强引用,字符串对象本身将有资格进行垃圾收集

在第45行,rs.getString(“name”)返回的string对象被推送到堆栈上

没有返回字符串对象。有一个返回的字符串引用

至少在概念上,对象永远不会在堆栈上,永远不会返回,永远不会传递。这只是一个参考

在弹出返回的string对象后,它会被垃圾收集还是在该方法的堆栈消失时被释放内存

当堆栈弹出时,引用将被清除,这意味着如果没有其他强引用,字符串对象本身将有资格进行垃圾收集。

1)堆栈仅包含对该对象的引用。所有对象都存储在堆上

2) 当没有对字符串的活动引用时,该字符串的存储可能会被垃圾回收。这与是否从堆栈中弹出无关。这是对整个程序中该字符串的引用。

1)堆栈仅包含对对象的引用。所有对象都存储在堆上

2) 当没有对字符串的活动引用时,该字符串的存储可能会被垃圾回收。这与是否从堆栈中弹出无关。这是关于在整个程序中对该字符串的引用

  • 堆栈引用的是字符串,而不是字符串本身

  • 由于您没有分配字符串,因此当对ResultSet中的行的引用被GCed时,该值将被GCed

  • 堆栈引用的是字符串,而不是字符串本身

  • 由于您没有分配字符串,因此当对ResultSet中的行的引用被GCed时,该值将被GCed