基本知识
在学习堆外内存之前,有必要学习一些基本知识,例如,各个基本数据类型在Java中所占用的字节数,big endian vs little endian等
数据类型
数据类型 | 占用字节 |
---|---|
byte | 1 byte |
short | 2 byte |
int | 4 byte |
long | 8 byte |
char | 2 byte |
short | 2 byte |
float | 4 byte |
double | 8 byte |
big endian vs little endian
big endian表示低位地址存储高位字节
little endian表示低位地址存储低位字节
例如,以字符’a’为例,占用2个字节。
以big endian方式存储:00 96
以little endian方式存储:96 00
不同的机器可能以不同的方式存储字节,当进行网络传输时,网络协议定义了一种规范的传输顺序
String vs new String()
String a = "hello";
String b = "hello";
String c = new String("hello");
System.out.println(a == b);
System.out.println(a == c);
输出如下:
true
false
对于a和b变量来说,首先在共享字符串池中找是否存在"hello"字符串,如果存在则返回。
对于c变量来说,new String(“hello”)保留上面的查询过程,但是会创建对象,并返回该对象的引用。
基本介绍
off-heap通过allocateDirect(int byte_length)分配堆外内存,它类似于一个字节数组。
有以下插入数据的方法:
- put(byte)
- put(byte[])
- putChar(char)
- putInt(int)
- putLong(long)