mirror of
https://github.com/enso-org/enso.git
synced 2024-11-30 05:35:09 +03:00
242bd52942
Introduces unboxed (and arity-specialized) storage schemes for Atoms. It results in improvements both in memory consumption and runtime. Memory wise: instead of using an array, we now use object fields. We also enable unboxing. This cuts a good few pointers in an unboxed object. E.g. a quadruple of integers is now 64 bytes (4x8 bytes for long fields + 16 bytes for layout and constructor pointers + 16 bytes for a class header). It used to be 168 bytes (4x24 bytes for boxed Longs + 16 bytes for array header + 32 bytes for array contents + 8 bytes for constructor ptr + 16 bytes for class header), so we're saving 104 bytes a piece. In the least impressive scenarios (all-boxed fields) we're saving 8 bytes per object (saving 16 bytes for array header, using 8 bytes for the new layout field). In the most-benchmarked case (list of longs), we save 32 bytes per cons-cell. Time wise: All list-summing benchmarks observe a ~2x speedup. List generation benchmarks get ~25x speedups, probably both due to less GC activity and better allocation characteristics (only allocating one object per Cons, rather than Cons + Object[] for fields). The "map-reverse" family gets a neat 10x speedup (part of the work is reading, which is 2x faster, the other is allocating, which is now 25x faster, we end up with 10x when combined). |
||
---|---|---|
.. | ||
akka-native/src/main | ||
cli/src | ||
connected-lock-manager/src | ||
distribution-manager/src/main/scala/org/enso/distribution | ||
docs-generator | ||
downloader/src | ||
edition-updater/src | ||
edition-uploader/src/main/scala/org/enso/build | ||
editions/src | ||
flexer | ||
graph | ||
interpreter-dsl/src/main/java/org/enso/interpreter/dsl | ||
json-rpc-server | ||
json-rpc-server-test | ||
library-manager/src | ||
library-manager-test/src | ||
locking-test-helper/src/main/scala/org/enso/runtimeversionmanager/test | ||
logger | ||
logging-service/src | ||
logging-truffle-connector/src/main | ||
logging-utils/src | ||
parser-service | ||
pkg | ||
profiling-utils/src/main/scala/org/enso/profiling | ||
project-manager | ||
runtime-version-manager/src | ||
runtime-version-manager-test/src | ||
searcher/src | ||
syntax | ||
task-progress-notifications/src/main/scala/org/enso/cli/task/notifications | ||
testkit/src/main/scala/org/enso/testkit | ||
text-buffer/src | ||
version-output/src/main/scala/org/enso/version |