内存有效的方式来存储整数列表

Seb*_*ien 12 javascript arrays optimization integer

我正在进行一些javascript 3D处理,并且我有非常大量的对象(比如对象A),每个对象包含一些东西和一组正整数,例如[0,1,4],[1,5 ,74,1013]等.它们不需要私有值,所有对象都可以共享相同的列表.数字可以从0到数千,比如说65k(短).

分析显示,阵列正在消耗大量内存.在计算时,我的程序达到了超过2GB的分配内存,这不是一些愚蠢的预优化.

我有2个用于内存优化的线索:

  1. 找到一种更有效的内存方式来存储thoses列表(也许是大数字位数?)
  2. 找到一些方法来避免重复.例如,我碰巧发现一些数组(如[0,1,2,3,4,5,6])存在于超过40 000个对象A中.也许存储数组在树结构中并制作我的对象指出它会有帮助吗?

你有什么建议吗?

编辑:我忘了提它,但重要的是:列表中的每个整数都是UNIQUE.EDIT2:唯一需要检索的是整数的SET,顺序并不重要.

我正在考虑使用按位运算将thodes数组转换为"Big Integers",即使用某个类创建Big Integer,设置位1,5,74,1013,将big int转换为字符串(8字节的数组)并存储字符串,但它并不总是一个增益(例如,数组[4000]将表示为一个500字节长的字符串......)

项目范围(没用,但我被要求了)

这应该是无用的回答这个问题,但我已经多次被要求了,我把它放在这里.

我正在构建一个体积庞大的三维网格物体,为了简化,让我们假设我有很多球体.我知道他们的位置(中心,光线),我想在一个3D网格中绘制它们.为此,我有一个称为八叉树的记忆结构,允许我在我的对象表面周围的较低单元格(八叉树节点)中划分3D空间.然后我可以从细胞中构建网格.

Those单元格在我的描述中称为对象A. 每个单元格包含一个id列表(正整数),指向单元格相交的Sphere对象.

事实是,分析显示,单元格阵列在内存中保留了数百MB.我想减少这个数字,通过找到一种方法来删除所有重复项和/或如果可能的话,找到一种更有效的方法来存储肯定的id列表(可以从0到65k).

Vla*_*tin 3

查看此页面https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays?redirectlocale=en-US&redirectslug=JavaScript%2FTyped_arrays,我包含低级javascript容器,我认为其中之一适合您的需求