java - 容纳唯一编号的最小(尺寸)物体?

标签 java memory uuid

我遇到的情况是,我有很多计算机并且需要有唯一的 ID。

他们会通过 API 请求发送其 uniqueId。该对象看起来像

class ID {
 long timestamp;
 int id;
}

该对象可能的最小大小为24 字节(8 字节长、4 字节整数、8 字节对象引用和 4 字节填充)。我需要在内存中保存数百万个这样的对象,这就是内存受到关注的原因。我需要时间戳用于订购目的。

我最初认为每个节点在启动时都会有UUID(作为唯一的字符串)。由于UUID采用128位,它不能适合Int范围

我有什么选择?

最佳答案

即使您的对象总共占用 24 个字节。即使您有数十百万的数据,也只有 240 MB。确实是一个很大的数字,但与大多数现代个人电脑的尺寸相比还是很小。

所以我假设您遇到了一些限制 RAM 的情况。

假设您有数百万个这样的对象。据推测,它们将存储在硬盘上。否则,当电源出现故障时,您将丢失数百万个引用信息。如果您不需要经常迭代列表,您可以将它们存储在 HDD 上以释放 RAM。

如果这是不可能的,我建议用时间戳数组替换对象的链接列表。只是时间戳。然后使用 ID 号对数组进行索引。当然,这是假设 ID 号从 0 开始并达到数百万。如果它们随机分布在 32 位整数的域中,那么这将不起作用。

现在每个条目只需要 8 个字节。如果您需要查找与特定时间戳对应的 ID,则需要搜索整个数组以查找该时间戳。如果您需要搜索特定 ID 的时间戳,那么您只需索引该数组即可。 返回 timstamps[index];

如果您要添加和删除项目,那么您可能需要保留跟踪 Activity 元素总数的变量。

关于java - 容纳唯一编号的最小(尺寸)物体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267455/

相关文章:

java - 无法使用 SDK 打开 Facebook session

java - Android 上的 TCP 套接字连接被拒绝

bash - 如何在shell脚本中生成uuid

mysql - MySQL bigint转UUID的存储过程

java - 使用 JFace 渲染表中重复元素的索引

java - Eclipse 出现问题,无法导入 org.apache.maven.surefire.report.RunListener;

c++ - 不正常的退出会破坏 C++ 内存分配器吗?

C++ 内存地址

memory - 是否有可能在 Rust 中导致内存泄漏?

mysql - 在 Liquibase 中自动生成 UUID - Mysql MariaDB