Oracle Database JDBCドライバー、12より前のバージョン:
ドライバは、各列の最大サイズにfetchSizeの行数を掛けたものを割り当てます。 クエリを実行する前。
たとえば、VARCHAR(4000)の場合 列は、fetchSizeの8kバイトを割り当てます 。
バージョン12(およびそれ以降):
fetchSizeの行ごとに列ごとに約15バイトを割り当てます クエリを実行する前。実行後、バージョン12のドライバーは、実際の行データを格納するために必要な量だけを割り当てます。
その結果、バージョン12のドライバーは通常、以前のバージョンのドライバーよりも大幅に少ないメモリを使用します。
あなたの例 :
あなたの例では、VARCHAR(20) 最大40バイト、NUMBER 最大22バイトでVARCHAR(100)にすることができます 100バイトもの大きさ。 fetchSizeを使用 100に設定すると、古いドライバーは(40 + 22 + 100) * 100 = 16kを割り当てます。 。バージョン12のドライバーは、3 * 15 * 100 = 4.5kを割り当てます。 。私が無視している両方のドライバーに追加のオーバーヘッドがあります。