⾸先在Java中定义的⼋种基本数据类型中,除了其它七种类型都有明确的内存占⽤字节数外,就boolean类型没有给出具体的占⽤字节数,因为对虚拟机来说根本就不存在 boolean 这个类型,boolean类型在编译后会使⽤其他数据类型来表示,那boolean类型究竟占⽤多少个字节?带着疑问,随便⽹上⼀搜,答案五花⼋⻔,基本有以下⼏种:
Java中boolean类型占⽤多少个字节?
1、1个bit
理由是boolean类型的值只有true和false两种逻辑值,在编译后会使⽤1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最⼩的存储单位。
2、1个字节
理由是虽然编译后1和0只需占⽤1位空间,但计算机处理数据的最⼩单位是1个字节,1个字节等于8位,实际存储的空间是:⽤1个字节的最低位存储,其他7位⽤0填补,如果值是true的话则存储的⼆进制为:0000 0001,如果是false的话则存储的⼆进制为:0000 0000。
3、4个字节
理由来源是《Java虚拟机规范》⼀书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了⾮常有限的⽀持。在Java虚拟机中没有任何供boolean值专⽤的字节码指令,Java语⾔表达式所操作的boolean值,在编译之后都使⽤Java虚拟机中的int数据类型来代替,⽽boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使⽤是4个字节,在数组中⼜是1个字节。
显然第三条是更准确的说法,那虚拟机为什么要⽤int来代替boolean呢?为什么不⽤byte或short,这样不是更节省内存空间吗。⼤多数⼈都会很⾃然的这样去想,我同样也有这个疑问,经过查阅资料发现,使⽤int的原因是,对于当下32位的处理器(CPU)来说,⼀次处理数据是32位(这⾥不是指的是32/64位系统,⽽是指CPU硬件层⾯),具有⾼效存取的特点。
最后的总结:
根据
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
官⽅⽂档的描述:
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.
布尔类型:布尔数据类型只有两个可能的值:真和假。使⽤此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这⼀点信息,但是它的“⼤⼩”并不是精确定义的。
可以看出,boolean类型没有给出精确的定义,《Java虚拟机规范》给出了4个字节,和
boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是运算效率和存储空间之间的博弈,两者都⾮常的重要。
最后免费分享一份GitHub 上标星 120k的Java核心进阶知识全面解析,不论是用于巩固基础,还是在面试中提高竞争力都很有用,下面展示部分截图。
文末附免费下载方式
(一). 基础
1、Java 基本功
-
Java 入门(基础概念与常识)
-
Java 语法
-
基本数据类型
-
方法(函数)
2、Java 面向对象
-
类和对象
-
面向对象三大特征
-
修饰符
-
接口和抽象类
-
其它重要知识点
3、Java 核心技术
-
集合
-
异常
-
多线程
-
文件与 I\O 流
(二). 并发
1、并发容器
-
JDK 提供的并发容器总结
-
ConcurrentHashMap
-
CopyOnWriteArrayList
-
ConcurrentLinkedQueue
-
BlockingQueue
-
ConcurrentSkipListMap
2、线程池
-
使用线程池的好处
-
Executor 框架
-
(重要)ThreadPoolExecutor 类简单介绍
-
(重要)ThreadPoolExecutor 使用示例
-
几种常见的线程池详解
-
ScheduledThreadPoolExecutor 详解
-
线程池大小确定
3、乐观锁与悲观锁
-
何谓悲观锁与乐观锁
-
乐观锁常见的两种实现方式
-
乐观锁的缺点
-
CAS与synchronized的使用情景
(三). JVM
1、Java内存区域
-
概述
-
运行时数据区域
-
HotSpot 虚拟机对象探秘
-
重点补充内容
2、JVM垃圾回收
-
揭开 JVM 内存分配与回收的神秘面纱
-
对象已经死亡?
-
垃圾收集算法
-
垃圾收集器
3、JDK 监控和故障处理工具
-
JDK 命令行工具
-
JDK 可视化分析工具
(四)网络、linux、数据结构与算法、数据库、系统设计、必会工具、面试指南
因为篇幅有限,其他内容就不一一展示了,这本进阶笔记总共有512页。对于想要进阶的小伙伴来说应该会很有帮助,希望也能帮助到你。
需要的小伙伴可以点击下面的名片免费领取。