操纵记忆职业

时间:2012-10-26 10:05:11

标签: java memory

在我的程序中,我生成一些ramdomly标识符来标识一些字符。例如:

12555678 to identify 'a'
12 to identify 'g'
13456789900000076 to identify 'c'
...

在我的算法中,我不知道这些标识的大小是多少。所以,我使用BigInteger个数字。我想减少内存,然后当我生成一个标识符12时,如果我可以使用其他类型(不是BigInteger),我可以在内存中获胜。所以我的问题是,是否可以使用其他类型来操作内存并仅租用我的标识符的确切大小?

由于

2 个答案:

答案 0 :(得分:5)

BigInteger与表示数字所需的一样大(加上一些开销)

如果你可以使用Long,它会更小(因为它的头部较少)使用小于Long的类型不会产生太大的差异,因为头顶是相同的。

如果你可以使用64位有符号值,使用long比使用Long小5倍,所以如果内存很重要,我会找到一种方法将自己限制在18万亿万亿标识符。

答案 1 :(得分:0)

您可以将字段声明为Number类型,这样就可以BigInteger以及Integer甚至Short

根据您打算在值上调用的方法,您可能需要专门检查BigInteger大小写,并向下转发以单独处理它。其他所有内容都可以通过number.longValue()处理。

执行此操作意味着您的引用具有能力以在需要时保留BigInteger,但您可以在值允许时传入Short以节省内存。