Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

有正确的方向总是好事,通过努力我们发现: FileChannel 会将读取时申请的堆外内存存在一个 buffer 池里,这个 buffer 池的大小是 1024(根据机器可能有所不同),每个 buffer 的大小由一个参数控制,而每个 buffer 池又是 ThreadLocal 的,只要线程仍然存活,这个 buffer 池内的堆外内存缓存就不会释放。也就是说,我们给查询开了 CPU 核数的线程池,这个线程池的查询线程会一直存活,且每个线程读取 tsfile 文件时都会开一个 fileChannel,因此堆外内存的总占用为:

查询线程数 *  同时打开的文件数 * buffer  buffer 池大小(1024) * 单个 buffer大小。


以下为 JVM 源码

...