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 632.79 MiB.
Total analysed size: 218.48 MiB
Methods: 59.79 MiB for 417932 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.71 MiB
Classes: 89.38 MiB for 30433 classess.
Instance Side: 36.25 MiB
Without method dictionaries: 12.82 MiB
By componets: 35.85 MiB
Method dictionaries: 23.42 MiB
Basic Size in Memory: 3.09 MiB
Other: 9.34 MiB
Subclasses: 275.89 KiB
Protocols: 5.95 MiB
Layout: 712.96 KiB
Shared pools: 2.43 MiB
Class side: 53.14 MiB (metaclasses)
Without method dictionaries: 30.87 MiB
By componets: 27.40 MiB
Method dictionaries: 22.26 MiB
Basic Size in Memory: 1.85 MiB
Other: 3.28 MiB
Protocols: 2.58 MiB
Layout: 713.27 KiB
By data:
Basic Size in Memory: 4.94 MiB
Method dictionaries: 45.69 MiB
Subclasses: 275.89 KiB
Protocols: 8.53 MiB
Shared pools: 2.43 MiB
Layout: 1.39 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.31 MiB for 206453 symbols
Pragmas Cache: 4.90 MiB
GT Completion Cache: 54.28 MiB
Packages: 1.80 MiB
Navigation Environment: 2.01 MiB
When using traits, metaclasses use two extra arrays. This can introduce a memory overhead when traits have many users.
Traits overhead: 12.35 MiB
This measures the size of several types of instances, to double check that the previous calculations did not miss something.
MethodDictionary
sanity check:
75444 instances
71.42 MiB using HashedCollection>>#gtSpecificSizeInMemory
30.51 MiB using #selector
CompiledMethod
:
418094 instances
59.82 MiB using CompiledMethod>>#gtSpecificSizeInMemory
35.29 MiB using #selector
CompiledBlock
instances
120134 instances
7.00 MiB using #selector
ClassOrganization
:
0 instances
0 B using ClassOrganization>>#gtSpecificSizeInMemory