zoukankan      html  css  js  c++  java
  • JVM

    看了不少资料,总结下:

    堆外内存 / 直接内存(Direct Memory)
    JDK1.4中引入的NIO类,基于channel和Buffer的I/O方式,可用Native库直接分配堆外内存,然后利用一个存储在堆中的DirectByteBuffer对象作为这块内存引用来操作。避免了在Java堆和Native堆中来回复制数据。

    优点
      1.堆外内存不影响 JVM GC,程序会减少 Full GC。
      2 IO 操作使用堆外内存比堆内存快。因为堆内在flush到远程时,会先复制到直接内存(非堆内存),然后在发送;直接移到堆外就更快了

    缺点
      1 堆外内存难以控制,如果内存泄漏,那么很难排查
      2 堆外内存只能通过序列化和反序列化来存储,保存对象速度比堆内存慢,不适合存储很复杂的对象。一般简单的对象或者扁平化的比较适合。

    常用场景
      通常用在通信过程中做缓冲池,在mina,netty等nio框架中屡见不鲜

    创建
      堆外内存可以通过 java.nio.DirectByteBuffer 来创建,调用 allocateDirect 方法申请即可。
      API:http://docs.oracle.com/javase/8/docs/api/

    其他:

      另外,默认的情况下堆外内存是有一定的限制的(待定);
      可以通过设置-XX:MaxDirectMemorySize=10M控制堆外内存的大小:

    相关资料:

      《Java堆外内存之突破JVM枷锁

      《JVM源码分析之堆外内存完全解读

      《java 内存移到堆外!!! Jvm gcih 淘宝优化JVM实践

      《一个失败的java堆外缓存库

  • 相关阅读:
    正则表达式
    抽象
    面向对象
    this关键字
    http协议
    URL
    Ajax
    PHP命名空间
    PDO
    异常
  • 原文地址:https://www.cnblogs.com/iceJava/p/5440034.html
Copyright © 2011-2022 走看看