首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么flag+bitmask在java中的内存效率更高?

为什么flag+bitmask在java中的内存效率更高?
EN

Stack Overflow用户
提问于 2015-01-21 04:42:20
回答 3查看 911关注 0票数 0

我是非常新的,更多的“技术”方面,就其本身,计算,所以请容忍我,如果这是一个愚蠢的问题。我忽略了一个可能很明显的点,但是为什么flags+bitmasks的内存效率比说,一群同样大小的布尔人更有效,考虑到您不需要初始化多达32个整数才能填充flag

它们只是计算速度更快,还是占用了更少的内存(如果是这样的话,我就迷路了)。

我在查这些,但我没看到我的问题:

编辑: @EJP --这是我从vipan.com获得的“初始化”。一个整数有32个实例化,占用(4个字节* 32),而对于(1字节* 32 )则相当于32个布尔值:

代码语言:javascript
复制
// Constants to hold bit masks for desired flags
static final int flagAllOff = 0;  //         000...00000000 (empty mask)
static final int flagbit1 = 1;    // 2^^0    000...00000001
static final int flagbit2 = 2;    // 2^^1    000...00000010
static final int flagbit3 = 4;    // 2^^2    000...00000100
static final int flagbit4 = 8;    // 2^^3    000...00001000
static final int flagbit5 = 16;   // 2^^4    000...00010000
static final int flagbit6 = 32;   // 2^^5    000...00100000
static final int flagbit7 = 64;   // 2^^6    000...01000000
static final int flagbit8 = 128;  // 2^^7    000...10000000
//...
static final int flagbit31 = (int) Math.pow(2, 30);   // 2^^30
//...

// Variable to hold the status of all flags
int flags = 0;

编辑:,所以在本例中,flags是我的标志变量。但是如果我想说,在flags中表示一些值,我要做一些flags = flagbit1 | flagbit2 | flagbit3 | ... | flagbit31形式的事情。为了将flags设置为任何结果,我必须创建32个名为flagbit#和的整数,这是我要问的问题。

EN

回答 3

Stack Overflow用户

发布于 2015-01-21 04:54:06

FIrst中,在使用位操作时,不需要初始化多达32个整数来填充标志。

您需要的是为所有标志设置一个变量。例如,整数变量具有表示大约32个标志的能力。在这种情况下,你的内存效率大约是32位。

另一方面,如果您使用布尔值来表示您的标志,那么您必须根据需要初始化多少个布尔值。每个布尔变量本身大约是32位。因此,在本例中,内存效率约为32 * 32位。

不仅在内存效率方面,比特更好,但就我而言,它们要快得多,然后是一组布尔值。

票数 0
EN

Stack Overflow用户

发布于 2015-01-21 04:54:47

来自Java虚拟机规范

代码语言:javascript
复制
The Java Virtual Machine encodes boolean array components using 1 to represent
true and 0 to represent false. Where Java programming language boolean values
are mapped by compilers to values of Java Virtual Machine type int, the compilers
must use the same encoding.

所以很明显是有开销的。

票数 0
EN

Stack Overflow用户

发布于 2015-01-21 04:48:02

在许多语言中,Booleans通常在内部被表示为一个字节(有时是一个单词)。

这篇文章“为什么要使用flags+bitmasks而不是一系列的布尔人?”Enum通常是整数。但它也代表了一个信号量。对于机器/语言,整数大小往往是不同的。通常,枚举的有用性是项目的单数状态。

如果你玩二进制数学,你会发现它比十进制要有效得多。处理器在那里都是二进制的。当他们的整数-他们是假的,他们把它转换为二进制(位)。所以没有任何‘假装’的开销

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28059742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档