当我们使用JDBC(Java)或DBD(Perl)并触发查询时,我们会得到结果。
现在在我的程序中,我只是将结果写入文件。
数据集很大(数百万行)。
有没有办法减少内存占用。
我在Perl中观察到的是它没有释放用于将数据绑定到变量的内存。
1)建立连接。执行查询
my $data ;
while ( $dbh->next )
{
# Bind variables ;
$data = ..
writeToFile ( data => $ data ) ;
}
在JDBC中,如果我将绑定数据变量/对象设置为null,它是否会在执行垃圾收集时释放内存
1)建立连接
while ( results->hasNext() )
{
Data data ;
writeToFile ( data ) ;
data = null ;
}
PERL DBD驱动程序。
I have not installed any special driver. Whatever was installed by unix admin with perl module.
JDBC驱动程序。
Standard sybase driver.
答案 0 :(得分:0)
有没有办法减少内存占用
至少对于JDBC来说可能存在;它取决于JDBC驱动程序的实现。例如,MySQL Connector / J的默认行为是立即检索整个ResultSet。但是,您可以将JDBC连接告诉" stream"通过为setFetchSize(Integer.MIN_VALUE)
对象指定Statement
来获得结果。