堆外内存例子

本文介绍了Java堆外内存的基本知识,包括数据类型、字节序(big endian与little endian)以及`String`与`new String()`的区别。讲解了堆外内存的分配方法`allocateDirect(int byte_length)`以及`ByteBuffer`的重要属性如mark、position、limit和capacity。通过实例展示了如何插入和读取数据,以及如何处理内存限制。文章还提到了`Unsafe`类用于分配内存的方法,强调了内存操作的边界问题。
摘要由CSDN通过智能技术生成

基本知识

在学习堆外内存之前,有必要学习一些基本知识,例如,各个基本数据类型在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)分配堆外内存,它类似于一个字节数组。
有以下插入数据的方法:

  1. put(byte)
  2. put(byte[])
  3. putChar(char)
  4. putInt(int)
  5. putLong(long)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值