在Java虚拟机规范说有布尔有限的支持原始类型.
没有专门针对布尔值操作的Java虚拟机指令.相反,Java编程语言中对布尔值进行操作的表达式被编译为使用Java虚拟机int数据类型的值.
以上暗示(虽然我可能误解了它)在操作布尔值时使用int数据类型,但这是一个32位内存构造.假设布尔值仅代表1位信息:
什么在内存和CPU使用方面更有效 - 一个booleans或BitSet 数组?不使用特定的BitSet方法,只对数组进行get/set/clear(==,=,Arrays.fill).
在求职面试中我被问到这个问题,我一直想知道正确的答案.
您有一个从0到n-1的数字数组,其中一个数字被删除,并替换为数组中已有的数字,该数字与该数字重复.我们如何在时间O(n)中检测到这个重复?
例如,1,2,3,4将成为一个数组1,2,2,4.
时间O(n 2)的简单解决方案是使用嵌套循环来查找每个元素的副本.
我试图初始化一个布尔类型的数组,其大小是一个10位整数.它继续抛出OutOfMemoryException.我已经将eclipse堆空间的大小从256增加到1024.有什么我不想做的事情吗?
int size = 1000000000;
boolean[] primesList = new boolean[size];
Run Code Online (Sandbox Code Playgroud) 众所周知,C++ bool的大小必须至少为1个字节,以便为每个[/sf/answers/144519581/]创建指针.但是Java中没有指向原始类型的指针.然而,他们仍然至少占用1个字节[/sf/answers/26851821/].
为什么会这样 - 为什么Java不能boolean是1位大小?除了计算时间,如果有一个大boolean数组,肯定可以设想一个编译器进行适当的移位以检索对应于某个boolean值的单个位?
我一直在考虑用Java优化我最新的两种数据存储技术,并且想知道哪种内存效率最高.以下是这两个类的描述.为了便于论证,假设它们具有与数据接口相同的方法,允许用户通过以下方法单独或按范围获取或设置任何位的状态:
public boolean getBitState(byte bitIndex)
bitIndexpublic Clazz setBitState(byte bitIndex, boolean newState)
bitIndex,以newState及返回生成的对象public int getStateOfBits(byte startIndex, byte endIndex)
startIndex和endIndex作为intpublic Clazz setStateOfBits(byte startIndex, byte endIndex, int newState)
startIndex,并endIndex在所提供的价值newState.newState位数少于拟合,则通过向左添加零来使其适合newState位数多于拟合,则会裁剪多余的位(在左侧)这些是我使用此接口所做的类:
该类使用一种int通过按位函数存储32位数据的方法.
该类使用32 booleans 的数组作为通过标准数组交互存储32位数据的方式.
线程"main"中的异常java.lang.OutOfMemoryError:Java堆空间
使用[100000] [100000]的2D阵列和每个[100000]的其他两个阵列.我需要在整个程序中使用这三个数组,因此无法释放内存.
已经在Netbeans中尝试过VM Options -Xmx512m
请具体一步一步,我是Java和Netbeans的新手.
在此先感谢您的帮助....
java ×9
arrays ×5
memory ×4
performance ×2
32-bit ×1
algorithm ×1
bitsets ×1
boolean ×1
low-level ×1
optimization ×1