使用整数标志和按位运算是减少高容量对象的内存占用的有效方法吗?
记忆足迹
我的理解是,通常将a boolean存储为intJVM实现中的一个.它是否正确?在这种情况下,32个标志肯定代表了大量的内存占用减少.
虽然JVM实现当然有所不同,但情况可能并非总是如此.
性能
我的理解是,CPU是非常数字驱动的,并且按位操作与计算中的内容一样高效.
在布尔运算中使用按位运算会有性能损失 - 甚至是增益吗?
备择方案
有没有更好的方法来完成同样的事情?Enum是否允许组合标志,即FLAGX = FLAG1 | FLAG2?
注意,最后一个方法propogateMove()是递归的,可能每秒被调用数百次,并且直接影响我们应用程序的响应性,因此使用标志来避免逻辑位并调用其他方法.
// FLAGS helper functions
private final void setclear(int mask, boolean set) { if (set) set(mask); else clear(mask); }
private final void set(int mask) { flags |= mask; }
private final void clear(int mask) { flags &= ~mask; }
private final boolean test(int mask) { return ((flags & mask) == mask); }
// Flags //////////////////////////////////////////////////////////////////////
private …Run Code Online (Sandbox Code Playgroud)