private void clearImpl(boolean clearHeaders) throws IOException {
    int startOffsetInFile = clearHeaders ? 0 : HeaderLayout.HEADER_SIZE;
    //IDEA-330224: It is important to zeroize until the EOF, not until the current maxAllocatedID
    // rows, because storage could be created and filled with previous VFS there maxAllocatedID=1e6,
    // but now VFS rebuilds itself, and maxAllocatedID=1e3 -- and there are rows [1e3..1e6] filled
    // with outdated data, which won't be cleared
    storage.zeroizeTillEOF(startOffsetInFile);

    //TODO RC: which memory semantics .clear() should have? Now it is just 'plain write', while
    //         all other access methods uses 'volatile read/write'. For current use-case
    //         (initialization) it is OK, since values are safe-published anyway, but for other
    //         use-cases it could lead to troubles.
    //         On the other hand: semantics of .clear() in a concurrent context is anyway tricky:
    //         we can't clear all content atomically.
    //         So the best option I see is: prohibit .clear() use in concurrent context at all
    //         -- state it has undefined behavior in such a context.
  }
private void clearImpl(boolean clearHeaders)