Java和内存管理

Ant*_*kov 3 c++ java memory-management

我是C++背景的java世界的新手.我想将一些C++代码移植到Java.代码使用稀疏向量:

struct Feature{
int index;
double value;
};

typedef std::vector<Feature> featvec_t;
Run Code Online (Sandbox Code Playgroud)

据我所知,如果一个人创建一个对象,内存使用会有一些开销.因此,当一组featvec_t中将有10-100百万个特征时,特征的天真实现将显着开销.

如何在Java中有效地表示这种结构内存?

wit*_*zar 6

如果内存确实是您的瓶颈,请尝试将数据存储在两个独立的阵列中: int[] indexdouble[] value.

但在大多数情况下,如此大的结构性能(时间)将是主要问题.根据主要对数据执行的操作(插入,删除,获取等),您需要选择适当的数据结构来存储类Feature的对象.使用java.util.Collection接口,其子接口(List,Set等)及其在java.util包中提供的实现开始您的探索.


Mic*_*rdt 5

为了避免每个条目的内存开销,您可以编写一个java.util.List<Feature>包含int和double数组的实现,并根据需要构建Feature对象.

拥有它自动调整,你可以使用TIntArrayListTDoubleArrayListGNU宝库.