我正在实现一个基于概率潜在语义索引(plsa)的算法,论文在这里,它需要一个名为 p_z_d_wt_wv 的四维数组,z 是主题,d 是文档,wt 是文本词,wv 是视觉词,而且每个维度的个数大概是12、7000、100、500,数组是双精度数组,所以需要32G内存!!我在下面这样分配这个内存,这只是为了演示,因为每个文档中 wt 和 wv 的数量是不同的。
p_z_d_wt_wv = new double[12][7000][][];
for( int t = 0; t < 12; ++t)
{
for( int d = 0; d < 7000; ++d )
{
p_z_d_wt_wv[t][d] = new double[100][500];
}
}
当我运行代码时,它有内存不足的问题。首先,为什么我的代码内存不足?如果数组以我的方式分配,内存是否连续分配? 是因为java对连续内存有内存限制吗?如果是这样,限制是多少?
其次,假设服务器的内存足够大,我该怎么做才能解决这个问题。我知道我可以将其更改为浮点数组,但还有其他解决方案吗?