public void flush() throws IOException {
    for (MappedFileChannel mfc : mfChannels) {
      try {
        mfc.flush();
      } catch (IOException ignored) {
      }
    }
    for (Field f : getClass().getDeclaredFields()) {
      if (!FieldModel.class.isAssignableFrom(f.getType())) continue;
      f.setAccessible(true);
      try {
        FieldModel fm = (FieldModel) f.get(this);
        fm.flush();
      } catch (IllegalAccessException e) {
        throw new AssertionError(e);
      }
    }
  }