我遇到的情况是,我有很多计算机并且需要有唯一的 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/