Hi John,
Now you need to experiment with setting the initial sizes of OldSpace and NewSpace.
Thanks - this works perfectly.
In our case, where we load about 400Mb of data and sundry exprenses at startup, the following settings in abt.ini work fine:
- Code: Select all
[VM Options]
newSpaceSize=16777216
oldSpaceSize=536870912
;since the loaded constants + product data should fit here (400Mb) + 100Mb free space
allocationIncrement=16777216
lowMinimum=4194304
This indeed limits the GC to a minimum without noticably affecting performance elsewhere.
wembley wrote:What I suggest is that you want to get your database objects into OldSpace as rapidly as possible (see Behavior>>#newTenured and #newTenured: for methods that create objects in OldSpace rather than NewSpace, although using these methods is probably overkill).
Agreed - the effect is not really noticable and #newTenured instead of #new is a pain, since you then need to handle initialization of standard objects like Dictionaries by hand. Our db objects are of a class that is also used live, so we can't even override the construction.
You can use the MemoryMonitor Tool to see the effects of your changes.
Indeed. Especially the behaviour when the oldspace gets full is instructive.
Thanks for solving our problems!
One additional question, for interests sake: Is it really not possible to completely protect objects from the GC, like packeged code?