热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaboolean大小_javaboolean大小

先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta

先看官方文档

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases.

...

boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.

从以上内容我们可以得知JAVA规范中没有定义boolean类型的大小。

这在stackoverflow中的这个问题有所提及

这里讲到

It's virtual machine dependent. // 由虚拟机自己实现

而我在其他地方查到了如下资料:

根据:(JVM规范第2版 3.3.4节)

Instead, expressions in the Java programming language that operate on boolean values are compiled to use values of the Java virtual machine int data type.

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. 而:Java virtual machine type int, whose values are 32-bit signed two's-complement integers。

Arrays of type boolean are accessed and modified using the byte array instructions

In Sun's JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in the Java programming language are encoded as Java virtual machine byte arrays, using 8 bits per boolean element.

因此,java的基本数据类型中,boolean只有两种状态,默认值为false.取值范围是{true,false},理论上占1bit,实际上:

单个的boolean 类型变量在编译的时候是使用的int 类型。

boolean b = true; // 这个b在JVM中占4个字节即:32位

boolean 类型的数组时,在编译的时候是作为byte array来编译的所以boolean 数组里面的每一个元素占一个字节(8位)

boolean[] b = new boolean[10]; // 数组时,每一个boolean在JVM中占一个字节。

验证

class LotsOfBooleans

{

boolean a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;

boolean b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;

boolean c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;

boolean d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;

boolean e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;

}

class LotsOfInts

{

int a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;

int b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;

int c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;

int d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;

int e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;

}

public class Test

{

private static final int SIZE = 100000;

public static void main(String[] args) throws Exception

{

LotsOfBooleans[] first = new LotsOfBooleans[SIZE];

LotsOfInts[] second = new LotsOfInts[SIZE];

System.gc();

long startMem = getMemory();

for (int i=0; i

{

first[i] = new LotsOfBooleans();

}

System.gc();

long endMem = getMemory();

System.out.println ("Size for LotsOfBooleans: " + (endMem-startMem));

System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));

System.gc();

startMem = getMemory();

for (int i=0; i

{

second[i] = new LotsOfInts();

}

System.gc();

endMem = getMemory();

System.out.println ("Size for LotsOfInts: " + (endMem-startMem));

System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));

// Make sure nothing gets collected

long total = 0;

for (int i=0; i

{

total += (first[i].a0 ? 1 : 0) + second[i].a0;

}

System.out.println(total);

}

private static long getMemory()

{

Runtime runtime = Runtime.getRuntime();

return runtime.totalMemory() - runtime.freeMemory();

}

}

/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=54327:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/apple/code/learning-demo/demo/out/production/untitled:/Users/apple/code/learning-demo/demo/lib/kotlin-stdlib.jar:/Users/apple/code/learning-demo/demo/lib/kotlin-reflect.jar:/Users/apple/code/learning-demo/demo/lib/kotlin-test.jar:/Users/apple/code/learning-demo/demo/lib/kotlin-stdlib-jdk7.jar:/Users/apple/code/learning-demo/demo/lib/kotlin-stdlib-jdk8.jar bigdata.Test

Size for LotsOfBooleans: 9483568

Average size: 94.83568

Size for LotsOfInts: 33599832

Average size: 335.99832

0

Process finished with exit code 0

测试结果

openjdk 11.0.2

boolean 32位(int)

boolean[] 8位(byte)



推荐阅读
  • 简单数据结构模板
    一,STL1>STL中数据结构常见操作a.assign(b.begin(),b.begin()+3);b为向量,将b的0~2个元素构成的向量赋给aa.as ... [详细]
  • 1.File类:文件和目录路径名的抽象表现形式2.创建对象:File(Stringpathname)通过给定的路径创建文件对象File(Stringpa ... [详细]
  • 在实际开发中,现在安卓端和后台之间的数据交互,一般都是用JSON来传递数据信息。JSON大家一般都比较熟悉。我这边就以实际项目中的后台传过来的情况和大家分析下及如何处理。比如后台返 ... [详细]
  • 最近自己做一个工具最后涉及到一个存储成bmp位图的形式,由于这部分并不是整个project的重点我就从网上找了例子改了改,但是目前的问题是有很多时候都是存储的bmp全黑,我也并不知道是怎么回事。 ... [详细]
  • DFS基本概念步骤优缺点典型例题递推基本概念直接或者间接调用自身的算法称为递归算法一般数据n ... [详细]
  • Android 自定义控件基础 canvas paint
    1、首先说一下canvas类:ClassOverviewTheCanvasclassholdsthedrawcalls.Todrawsomething,youne ... [详细]
  • 简单动态字符串redis里面很多地方都用到了字符串,我们知道redis是一个键值对存储的非关系型数据库,那么所有的key都是用字符串存储的,还有字符串类型,这些都是用字符串存储的 ... [详细]
  • C#按值复制数组我有一个类型化的数组MyType[]types;我想制作这个数组的独立副本。我试过这个MyType[]types2newMyType[types.Length];t ... [详细]
  • Ithinkthishasbeenupbefore,butcouldntfindanyanswertoit.Ifitsalreadyansweredplease ... [详细]
  • 软件工程—个人作业(5)
    题目要求:(1)输出某个英文文本文件中26字母出现的频率,由高到低排列,并显示字母出现的百分比, ... [详细]
  • 使用RSACryptoServiceProvider进行公钥加密我已经在CodeProject上发表了一篇文章,解释了如何使用RSA提供程序进行加密和解密:RSA私钥加密虽然200 ... [详细]
  • 是不是zlib是这些库的压缩算法的实现库,而这么多库它们只是在打包的时候使用了zlib进行压缩而已.而具体的打包格式就有ZIP,BZIP2,GZ之分?但是在我们在用gz压缩时候通常之前 ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
  • 2022416 Leetcode 633.平方数之和
    第一版,使用双指针,但是造成了溢出。classSolution{public:booljudgeSquareSum(intc){vector ... [详细]
  • 遇到的问题golang对于基本类型初始化的处理,是自动给基本类型赋值为默认值。比如:variint在这里如果不对i做任何赋值,那么i的值为零这个特性在很多地方能够避免访问到未初始化 ... [详细]
author-avatar
Luna--moon
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有