Analysing the size of code-related entities
This page provides an analysis for the size of the image, with a focus on the size of code entities, like methods and classes.
For performance reasons the vaues of these metrics are caches in GtMemoryMetrics
. They can be reset using the snippet below.
GtMemoryMetrics reset
Current image size is 672.99 MiB.
Total analysed size: 235.20 MiB
Methods: 64.92 MiB for 438328 methods.
The size of methods includes all bytecodes, additional state and literals. Literals include strings and literal arrays, but excludes symbols.
String literals size: 8.65 MiB
Classes: 96.23 MiB for 32430 classess.
Instance Side: 39.17 MiB
Without method dictionaries: 14.28 MiB
By componets: 38.84 MiB
Method dictionaries: 24.89 MiB
Basic Size in Memory: 3.29 MiB
Other: 10.65 MiB
Subclasses: 293.63 KiB
Protocols: 6.99 MiB
Layout: 759.77 KiB
Shared pools: 2.64 MiB
Class side: 57.06 MiB (metaclasses)
Without method dictionaries: 33.19 MiB
By componets: 29.58 MiB
Method dictionaries: 23.87 MiB
Basic Size in Memory: 1.97 MiB
Other: 3.73 MiB
Protocols: 2.99 MiB
Layout: 760.08 KiB
By data:
Basic Size in Memory: 5.27 MiB
Method dictionaries: 48.77 MiB
Subclasses: 293.63 KiB
Protocols: 9.98 MiB
Shared pools: 2.64 MiB
Layout: 1.48 MiB
The size of classes includes the size of the class object and various method dictionaries, but excludes the actual methods in those dictionaries
Symbols: 6.74 MiB for 217441 symbols
Pragmas Cache: 5.20 MiB
GT Completion Cache: 58.14 MiB
Packages: 1.86 MiB
Navigation Environment: 2.11 MiB
When using traits, metaclasses use two extra arrays. This can introduce a memory overhead when traits have many users.
Traits overhead: 12.80 MiB
This measures the size of several types of instances, to double check that the previous calculations did not miss something.
MethodDictionary
sanity check:
80384 instances
76.23 MiB using HashedCollection>>#gtSpecificSizeInMemory
32.70 MiB using #selector
CompiledMethod
:
438497 instances
64.95 MiB using CompiledMethod>>#gtSpecificSizeInMemory
37.45 MiB using #selector
CompiledBlock
instances
128529 instances
7.48 MiB using #selector