2011-09-28 44 views
-1

我正在做一些沉重的數據庫處理和正在錯誤消息在Scala中,以下模式匹配會阻止垃圾收集過多嗎?

GC開銷超過限制

造成

的ResultSet的getString

在我代碼我有如下支票

val myVal = result.getString("COLUMN") 
if (myVal == ...) {} 

什麼我不知道是,如果我改變這個

result.getString("COLUMN") match { 
case ... 
} 

能節省的變量不必被創建和垃圾收集?或者這是一些內部機制,這意味着無論如何都會發生這種情況?

編輯:結果是一個JDBC結果集

+7

如果您認爲垃圾回收是關於變量的,那麼您應該重新理解GC。變量只是指向對象的名稱標籤。無論哪種方式:更多的代碼,特別是關於「結果」的細節,可能會幫助人們提供幫助。 – delnan

+0

我想說建議的改變沒有改變,因爲儘管如此,仍然需要創建對象來進行比較。你應該做一些分析來隔離代碼中創建大量對象的部分。可能值得嘗試在數據庫中進行數據處理而不是Scala代碼,以避免將數據庫內容傳輸到JVM中的對象。 –

回答

1

它不會阻止對象分配。該對象由getString分配,而不是由val myVal =分配。 可能所做的事是儘快釋放對象,因爲只要沒有人引用它,它就有資格進行垃圾回收。如果您有指向它的myVal,直到myVal超出範圍纔會發生。

這可能對你有幫助,因爲非常短暫的物體對垃圾收集來說非常便宜。但是,要講的真相似乎不太可能。