Bug 576646 - JavaModel save: improve state.dat filesize

* encode char[] as UTF8 instead of UTF16.
 (accessRule.pattern is typically ASCII.)
* encode integers as byte/short if the range is appropriate.
 (indices are typically small numbers.)
* encode typical accessRule.problemId values with single byte.
 (normally only these problemIDs are used.)
* encode qualified Names as commonlength of previous name+suffix.
 (qualified names are typically sorted so that package is same.)
* encode repeated Names as index into automatic dictionary.
 (segment names are repetitive.)

=>
File size is typically decreased to 50%.
File size is decreased by even much larger factor for projects with many
access rules.
These optimizations are purely byte based heuristics and can still be
further compressed with general purpose entropy encoders.

Performance of read and safe is both >20% better.
Note that the bottle neck during reading is the LRUCache in
JavaModelManager.getAccessRuleForProblemId()

Change-Id: I3c1d47eeae6c12314d4acfcc9e641e30fb29f1cf
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.core/+/188566
Tested-by: Andrey Loskutov <loskutov@gmx.de>
Tested-by: JDT Bot <jdt-bot@eclipse.org>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
5 files changed
tree: d7a4f76a19bffa56fccb6b2a7356245a8e6c5d3d
  1. JCL/
  2. modules/
  3. org.eclipse.jdt.annotation/
  4. org.eclipse.jdt.annotation_v1/
  5. org.eclipse.jdt.apt.core/
  6. org.eclipse.jdt.apt.pluggable.core/
  7. org.eclipse.jdt.apt.pluggable.tests/
  8. org.eclipse.jdt.apt.tests/
  9. org.eclipse.jdt.apt.ui/
  10. org.eclipse.jdt.compiler.apt/
  11. org.eclipse.jdt.compiler.apt.tests/
  12. org.eclipse.jdt.compiler.tool/
  13. org.eclipse.jdt.compiler.tool.tests/
  14. org.eclipse.jdt.core/
  15. org.eclipse.jdt.core.ecj.validation/
  16. org.eclipse.jdt.core.formatterapp/
  17. org.eclipse.jdt.core.internal.tools/
  18. org.eclipse.jdt.core.tests.builder/
  19. org.eclipse.jdt.core.tests.compiler/
  20. org.eclipse.jdt.core.tests.model/
  21. org.eclipse.jdt.core.tests.performance/
  22. org.eclipse.jdt.tests.latestBREE/
  23. tests-pom/
  24. .gitignore
  25. CONTRIBUTING
  26. LICENSE
  27. NOTICE
  28. pom.xml
  29. README.md
README.md

JDT Core

This is the core part of Eclipse's Java development tools. It contains the non-UI support for compiling and working with Java code, including the following:

  • an incremental or batch Java compiler that can run standalone or as part of the Eclipse IDE
  • Java source and class file indexer and search infrastructure
  • a Java source code formatter
  • APIs for code assist, access to the AST and structured manipulation of Java source.

For more information and important links, refer to the [JDT wiki page] 1 or the [JDT project overview page] 2.

License

Eclipse Public License (EPL) v2.0