gpt4 book ai didi

java - 在 Java 中分配大量相对较小的对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:42 26 4
gpt4 key购买 nike

在 Java 中为多个(几百万个)小对象(包含 3 到 6 个 double ,可能是一个字符串)分配内存的最佳方法(最少内存消耗/交换)是什么?

我可以想到三种不同的策略:

  1. 天真:不做任何特别的事情,让虚拟机处理内存。

  2. 工厂风格:通过工厂类创建对象。工厂创造一次多个对象(每批约一千个)并处理对象回收(如果有旧的就不需要创建新的)。

  3. 数组样式:将数据存储在基本数组中。通过索引号访问数据。

澄清:目标平台的内存非常低(512 兆字节)。

最佳答案

选项 3 当然是最有效的内存。

例子:

class Point {
double x;
double y;
}

Point 对象需要 12,x 和 y = 28 字节需要 2 * 8
Point[]:使用 Point 对象数组:每个点 28 个字节(数组本身为 16 个字节)

现在作为
int[] xycoords: order: x1,y1,x2,y2,.....xn,yn:

每个 x,y 坐标需要 16 个字节。比类点高 57%

假设您构建了导航系统,但由于次优数据表示,您只能存储半个欧洲。

但是
虽然选项 3 可以节省内存,但我建议在第一个版本中使用 obejct 方法。数组方法有更多的编码错误概率,尤其是用于复杂算法。

一旦版本 1 工作(希望您有单元测试),您就可以使用数组方法实现 v2。并检查您的单元测试是否仍然有效。

关于java - 在 Java 中分配大量相对较小的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com