code: protected void truncate()
                      throws ObjectManagerException
      {
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.entry(this,
                          cclass,
                          "truncate",
                          new Object[] { new Long(fileMark) });
  
          // Make sure that all of the buffered data in the log is written.
          // The extra flush causes an extra padding log record to be written even if the page is empty
          // so truncate has a two page overhead. This flush may trigger a checkpoint even though the
          // log is in the process of truncating to recover space.
          flush();
          synchronized (fileMarkLock) {
              // The next flush request will cause the actual truncation. 
              truncateRequested = true;
              flush();
          } // synchronized (fileMarkLock).
  
          if (Tracing.isAnyTracingEnabled() && trace.isEntryEnabled())
              trace.exit(this,
                         cclass,
                         "truncate");
      }
docs: Writes buffered output to hardened storage, then ensure that the logHeader is
  rewritten to indicate a new start point in the log. This will be at a point
  previously set by a call to markAndWriteNext(). This blocks until
  actual truncation has taken place.
  
  @throws ObjectManagerException