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 560.02 MiB.
Total analysed size: 215.57 MiB
Methods: 59.13 MiB for 413172 methods.
The size of methods includes all bytecodes, additional state and literals. Literals include strings and literal arrays, but excludes symbols.
String literals size: 6.62 MiB
Classes: 88.07 MiB for 30033 classess.
Instance Side: 35.72 MiB
Without method dictionaries: 12.65 MiB
By componets: 35.33 MiB
Method dictionaries: 23.08 MiB
Basic Size in Memory: 3.05 MiB
Other: 9.20 MiB
Subclasses: 272.16 KiB
Protocols: 5.87 MiB
Layout: 703.59 KiB
Shared pools: 2.38 MiB
Class side: 52.35 MiB (metaclasses)
Without method dictionaries: 30.45 MiB
By componets: 26.97 MiB
Method dictionaries: 21.90 MiB
Basic Size in Memory: 1.83 MiB
Other: 3.24 MiB
Protocols: 2.56 MiB
Layout: 703.90 KiB
By data:
Basic Size in Memory: 4.88 MiB
Method dictionaries: 44.98 MiB
Subclasses: 272.16 KiB
Protocols: 8.43 MiB
Shared pools: 2.38 MiB
Layout: 1.37 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.27 MiB for 205143 symbols
Pragmas Cache: 4.86 MiB
GT Completion Cache: 53.46 MiB
Packages: 1.78 MiB
Navigation Environment: 1.99 MiB
When using traits, metaclasses use two extra arrays. This can introduce a memory overhead when traits have many users.
Traits overhead: 12.18 MiB
This measures the size of several types of instances, to double check that the previous calculations did not miss something.
MethodDictionary
sanity check:
74472 instances
70.34 MiB using HashedCollection>>#gtSpecificSizeInMemory
30.03 MiB using #selector
CompiledMethod
:
413335 instances
59.16 MiB using CompiledMethod>>#gtSpecificSizeInMemory
34.89 MiB using #selector
CompiledBlock
instances
118599 instances
6.91 MiB using #selector
ClassOrganization
:
0 instances
0 B using ClassOrganization>>#gtSpecificSizeInMemory