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 612.66 MiB.
Total analysed size: 228.27 MiB
Methods: 62.83 MiB for 432200 methods.
The size of methods includes all bytecodes, additional state and literals. Literals include strings and literal arrays, but excludes symbols.
String literals size: 7.70 MiB
Classes: 93.25 MiB for 31575 classess.
Instance Side: 37.75 MiB
Without method dictionaries: 13.33 MiB
By componets: 37.35 MiB
Method dictionaries: 24.42 MiB
Basic Size in Memory: 3.20 MiB
Other: 9.73 MiB
Subclasses: 286.49 KiB
Protocols: 6.17 MiB
Layout: 739.73 KiB
Shared pools: 2.56 MiB
Class side: 55.50 MiB (metaclasses)
Without method dictionaries: 32.20 MiB
By componets: 28.58 MiB
Method dictionaries: 23.30 MiB
Basic Size in Memory: 1.92 MiB
Other: 3.36 MiB
Protocols: 2.63 MiB
Layout: 740.04 KiB
By data:
Basic Size in Memory: 5.12 MiB
Method dictionaries: 47.71 MiB
Subclasses: 286.49 KiB
Protocols: 8.81 MiB
Shared pools: 2.56 MiB
Layout: 1.45 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.57 MiB for 213603 symbols
Pragmas Cache: 5.07 MiB
GT Completion Cache: 56.64 MiB
Packages: 1.84 MiB
Navigation Environment: 2.06 MiB
When using traits, metaclasses use two extra arrays. This can introduce a memory overhead when traits have many users.
Traits overhead: 12.69 MiB
This measures the size of several types of instances, to double check that the previous calculations did not miss something.
MethodDictionary
sanity check:
78282 instances
74.62 MiB using HashedCollection>>#gtSpecificSizeInMemory
31.94 MiB using #selector
CompiledMethod
:
432361 instances
62.86 MiB using CompiledMethod>>#gtSpecificSizeInMemory
36.65 MiB using #selector
CompiledBlock
instances
124750 instances
7.27 MiB using #selector