BigInteger与长期相比有效吗?

问题描述 投票:1回答:2

我在Java中实现了一个分布式键值存储。我需要为每个密钥保存一个时间戳。由于我想在系统中拥有大量的键,我决定使用BigInteger而不是long,但我担心它的效率。

请注意,我没有任何乘法,我只使用additioncomparTo。所以你认为BigInteger效率明显低于long

这是我第一次尝试BigInteger,与long相比还有其他问题吗?

java performance biginteger
2个回答
2
投票

没有.BigInteger需要比long更多的内存,并且因为它不是原始类型,它也更慢。我只会在你需要更多数字而不是长期提供的数字时使用它。

为了您的目的,据我所知,long应该足够(并且更有效)。


1
投票

Instant

如果你想要一个时间戳,我们已经有了一个类:Instant代表UTC时间轴上的一个时刻,分辨率高达nanoseconds

在Java 8中,当前时刻以高达毫秒的分辨率被捕获。在Java 9中,Clock的新实现将当前时刻捕获到完整的纳秒分辨率,具体取决于您的计算机时钟硬件。

UUID

但是,如果要在分布式系统中识别对象,请使用为此目的而发明的类型:Universally Unique Identifier (UUID)。此类型在官方标准中定义。由128位值组成,基本上是一个难以想象的大数字,但某些位具有一定的含义。

对于人类阅读,以规范格式生成十六进制字符串。

Java包含一个UUID类来表示这些值。我记得在OpenJDK实现中内部存储为一对64位long数字。

BigInteger > long

为了回答你的直接问题,BigInteger旨在代表巨大的数字,而非为效率而设计。 long原语(64位数)使用的内存要少得多,因为它缺少类和对象的开销以及用于表示和操作可能比容纳在CPU寄存器中的数字大得多的巨大数字的机制。并且long上的操作执行得更快。

所以,当你不需要BigInteger的功能时,坚持使用long原语。

© www.soinside.com 2019 - 2024. All rights reserved.