The INodeAttributeProvider and AccessControlEnforcer features degrade performance and generate excessive garbage even when neither is used. Main issues:
- A byte of components is unnecessarily created. Each path component lookup converts a subrange of the byte to a new String - then not used by default attribute provider.
- Subaccess checks are insanely expensive. The full path of every subdir is created by walking up the inode tree, creating a INode, building a string by converting each inode's byte name to a string, etc. Which will only be used if there's an exception.
The expensive of #1 should only be incurred when using the provider/enforcer feature. For #2, paths should be created on-demand for exceptions.