Java整数类型和取值范围
二进制 | 十进制 | ||||
数 | 二进制单位 | 数 | 十进制单位 | 10的次方数 | 单位的英语表示 |
20 | B | 1 | 1个 | 100 | units digit |
28 | B | 256 | 2百 | 102 | Byte |
210 | KB | 1 024 | 1千 | 103 | thousand |
216 | KB | 65536 64*KB | 6万 | 104 | Short |
220 | MB | 1 048 576 | 1百万 | 106 | million |
230 | GB | 1 073 741 824 | 10亿 | 109 | Billion |
232 | GB | 4294967296 4*GB | 40亿 | 109 | Int |
240 | TB太 | 1099511627776 | 1兆 | 1012 | 万亿 |
250 | PB拍 | 1125899906842620 | 1千兆 | 1015 | 千*万亿 |
260 | EB艾 | 1152921504606850000 | 1.15百京 | 1018 | 京 = 一亿个亿 |
264 | EB | 18446744073709600000 16*EB | 1.8千京 | 1019 | Long |
Java运行时内存
1. PC寄存器(program counter)
a) 每条线程都有一个PC寄存器
b) 用于保存“该线程的当前执行方法”的字节码指令地址(非Native方法)、或undefined(Native方法)
2. Java虚拟机栈(Java Virtual Machine stack)
a) 每一条线程都有自己的私有栈,栈与线程同时创建
b) 用于存储局部变量、正在计算的中间结果、方法调用与返回结果
c) 可能异常:StackOverflowError(线程请求分配的栈容量超过最大值)、OutOfMemoryError(没有申请到足够的内存)
3. Java堆(Java Heap)
a) JVM启动的时候被创建,供各个线程共享
b) 存储:类实例、数组对象。
c) 有自动内存管理系统(automatic storage managerment system),也就是garbagecollector(垃圾收集器)
d) 可能异常:OutOfMemoryError(所需的堆超过自动内存管理系统能提供的最磊容量)
4. 方法区(method area)
a) JVM启动的时候被创建,供各个线程共享
b) 存储类的结构信息:运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容、(类、实例、接口初始化时的)特殊方法。
c) 有异常:OutOfMemoryError(方法区空间不能满足内存分配请求)
5. 运行时常量池(runtime constant pool)
a) 在方法区中分配空间,会在加载类和接口到虚拟机时创建
b) 是class文件中每一个类或接口的常量池表(constant_pooltable)的运行时表示形式
c) 存储:编译期可知的数值字面量、运行期解析获得的方法或字段引用
d) 可能异常:OutOfMemoryError(创建类或接口时,需要构造此空间的容量超过了方法区能提供的最大值)
6. 本地方法栈(native method stack)
a) 每一个线程都有本地方法栈(如果JVM支持)
b) 是传统的栈,用来支持native方法
c) 可能异常:StackOverflowError(线程请求分配的栈容量超过允许的最大值)、OutOfMemoryError(没有申请到足够的内存)