• 关于 Direct Buffer 和 Non-Direct Buffer 的区别


    Direct Buffer:

    • 所分配的内存不在 JVM 堆上, 不受 GC 的管理.(但是 Direct Buffer 的 Java 对象是由 GC 管理的, 因此当发生 GC, 对象被回收时, Direct Buffer 也会被释放)
    • 因为 Direct Buffer 不在 JVM 堆上分配, 因此 Direct Buffer 对应用程序的内存占用的影响就不那么明显(实际上还是占用了这么多内存, 但是 JVM 不好统计到非 JVM 管理的内存.)
    • 申请和释放 Direct Buffer 的开销比较大. 因此正确的使用 Direct Buffer 的方式是在初始化时申请一个 Buffer, 然后不断复用此 buffer, 在程序结束后才释放此 buffer.
    • 使用 Direct Buffer 时, 当进行一些底层的系统 IO 操作时, 效率会比较高, 因为此时 JVM 不需要拷贝 buffer 中的内存到中间临时缓冲区中.

    Non-Direct Buffer:

    • 直接在 JVM 堆上进行内存的分配, 本质上是 byte[] 数组的封装.
    • 因为 Non-Direct Buffer 在 JVM 堆中, 因此当进行操作系统底层 IO 操作中时, 会将此 buffer 的内存复制到中间临时缓冲区中. 因此 Non-Direct Buffer 的效率就较低.
  • 相关阅读:
    docker--Dockerfile
    手动制作docker镜像--cnetos:6.9
    docker 容器的网络访问(端口映射)
    docker容器container
    docker镜像
    29 类中的函数重载
    28,友元的尴尬能力
    27,二阶构造模式(构造函数二阶构造)------对象初始化
    21,对象的构造顺序
    算法
  • 原文地址:https://www.cnblogs.com/yangqiong1989/p/10650034.html
Copyright © 2020-2023  润新知