Versions Compared

Key

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

...

单线程

循环开n个线程

大小为n的线程池

四种读文件模式:(文件大小80M,每次读取位置随机)

每个线程从同一个文件读一次(读取位置随机,下同)每个线程从同一个文件读一次

每个线程从同一个文件不断读取

每个线程从不同文件读读一次

...

readBufferSize 设置为 6 M, 无论 maxCachedBufferSize 大小如何设置,都直接OOM

实验2:readBufferSize

...

< MaxDirectMemorySize,readBufferSize > maxCachedBufferSize

static long maxCachedBufferSize = 1024 * 1024 * 1;
static int readBufferSize = 1024 * 1024 * 2;

...

static int threadNum = 100;

发生OOM,只剩下两个线程活跃,其他线程驻留

实验3:readBufferSize

...

< MaxDirectMemorySize,readBufferSize < maxCachedBufferSize

static long maxCachedBufferSize = 1024 * 1024 * 2;
static int readBufferSize = 1024 * 1024 * 1;

...

static int threadNum = 100;

只有5个线程活跃,其他线程OOM后退出

Image Added

Image Added

另一种情况:其他线程短暂休眠(0.5s左右)之后退出只有5个线程活跃,其他线程休眠,未爆OOM

原因解释:申请内存失败时会短暂等待,等待的最长时间是0.5s左右

Image Added

Image Added

Image AddedImage Removed

5、线程池,从文件随机读取一段

...

下一步,对参数 TEMP_BUF_POOL_SIZE 进行验证,但现在还没模拟出来。


View file
nameFileChannelBufferTest.java
height250