[问题] null 与 内存

楼主: storypp (随风而逝的是一份真)   2017-01-21 22:16:37
我在网络上找到一段code
public void selectAll(Connection con, String tableName) throws SQLException {
String sql = "select * from " + tableName;
Statement stat = null;
ResultSet rs = null;
stat = con.createStatement();
rs = stat.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
}
我想改为
public void selectAll(Connection con, String tableName) throws SQLException {
String sql = "select * from " + tableName;
Statement stat = con.createStatement;
ResultSet rs = stat.executeQuerty(sql);
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
}
我在执行的时候,感觉并没有差异,
但是我想了解一下,原本的写法是不是对内存释放比较友善?
因为我自己写的程式常常跑一段时间后,占用的内存越来越大,
怀疑是不是我都没有适时指定为null?
可是这个只是一个方法,方法执行结束,
不是就应该会释放内存了吗?
有必要特别再针对方法内的变量指派null吗?
作者: pan0438 (Libra)   2017-01-21 22:26:00
con后的close?
作者: dannypsnl (秦书)   2017-01-21 23:22:00
GC不保证回收时机,不然测测看两个差异多大
作者: csieflyman (风之骄子)   2017-01-21 23:39:00
使用 Eclipse Memory AnalyzerÀ鄟eak
作者: ssccg (23)   2017-01-22 00:00:00
没有差别...第一个写法也没有用完设null啊? 不懂你哪来这有差的想法方法结束,stack frame上的变量(reference)就没了完全没必要设null,指向的物件变成可GC,但不一定马上GC个人觉得设完全不会用到的初始值是不好的写法,唯一的效果是让compiler提示用到未初始化变量的错误消失,然后说不定就因此没发现会跑出NPE的执行路径...
作者: ht5603 (Mike)   2017-01-22 00:49:00
可能是为了在catch exception处理,所以把变量宣告在try上面
作者: cowbaying (是在靠北喔)   2017-01-22 06:25:00
只要该变量不再被参照 就会被GC
作者: marsyang1 (Mars)   2017-01-22 08:39:00
两个一样
作者: jtorngl (Pedrosa go!)   2017-01-22 13:31:00
应该是该物件没被reference,如果在此方法之外有其它变量还指向该物件,就算这个方法结束,GC执行时也不会清掉不过本文是不会,物件是在method中才建立的就是
作者: overxxx   2017-01-25 11:31:00
ResultSet/Statement需要close(),我通常会以try finally放在finally里判断不是null才做close

Links booklink

Contact Us: admin [ a t ] ucptt.com