直接内存和堆内存的区别

同样是在按Java工程师成神之路的学习过程中学到的。


定义
  • 直接内存:NIO的Buffer提供了一个可以不经过JVM内存直接访问系统物理内存的类——DirectBuffer。 DirectBuffer类继承自ByteBuffer,但和普通的ByteBuffer不同,普通的ByteBuffer仍在JVM堆上分配内存,其最大内存受到最大堆内存的限制;而DirectBuffer直接分配在物理内存中,并不占用堆空间,其可申请的最大内存受操作系统限制。

  • 堆内存:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

区别和应用场景
  • 直接内存的读写操作比普通Buffer快,但它的创建、销毁比普通Buffer慢。

  • 因此直接内存使用于需要大内存空间且频繁访问的场合,不适用于频繁申请释放内存的场合。

具体代码验证

待续。。。

猜你喜欢

转载自blog.csdn.net/u012895369/article/details/80464985