There is a huge overhead in ForkParser ContentHandlerProxy and ContentHandlerResource read/write char/string methods. A simple change to not loop reading/writing each char of strings can result in speed ups of several orders of magnitude.
Tests with ~10k small RFC822 files (22MB), 24 parsing threads, have shown parse times below:
ForkParser off: 4s
ForkParser on: 30min
ForkParser patched: 17s
Also, there is a bug when running at least with Oracle JDK8 that, if a String greater than 65535 chars is written, a UTFDataFormatException is thrown from DataOutputStream.writeUTF(String) method.