我已经读过,只有基元存储在堆栈内存中,对象存储在堆内存中。在下面的程序中,我递归调用一个方法来检查堆栈溢出错误发生之前的最大堆栈大小。
SET @query = 'SELECT product_id, '+@COLS_ISNULL+' FROM
(
select b.product_id, convert(CHAR(10), datelist, 120) PivotDate, product_ammount
from #datatable b
left join #temp d
on d.datelist between @tanggal_awal and @tanggal_akhir
and d.datelist = b.product_date
) x
pivot
(
sum(product_ammount)
for PivotDate in (' +@cols+ ')
) p'
这是' i'的最大输出是53481。
如果我将HashSet对象添加到方法并填充它:
public class MaxStackSize {
static int i =0;
public static void main(String[] args) {
method1();
}
public static void method1()
{
i++;
System.out.println(i);
method1();
}
}
' i'的最大输出是25403。
对于这两种情况,VM arg是-Xss5m。
如果只有基元存储在堆栈上,为什么在创建HashSet对象时堆栈大小会减少。
答案 0 :(得分:2)
基元存储在堆栈中。局部变量也是对象引用。您实例化的HashSet
在堆上,但对每个HashSet
变量set
的引用都在堆栈上。