I know the reason that JVM GC loves short-live object because it can be collected in minor GC. But why does JVM GC love immutable objects?
EDIT:
Charlie Hunt says that GC loves immutable objects in his presentation.
Thanks
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
If the GC can know that an object doesn’t contain any references to any gen0 objects, then it can be ignored when performing a gen0 collection. Likewise if an object doesn’t contain any reference to any gen0 or gen1 objects, it may be ignored when performing a gen1 collection. The more objects can be ignored during a collection, the faster that collection will be.
If an object survives a gen0 GC, it can be sure that any gen0 object to which it had held a reference will have been promoted to gen1; likewise if an object which didn’t contain any gen0 references survives a gen1 GC, any gen1 references it contained will have been promoted to gen2. Thus, once a object has been examined during a gen0 collection, it need not be examined again until the next gen1 collection, unless it is modified. Likewise an object that’s examined during a gen1 collection need not be examined until the next gen2 collection unless it is modified.
Knowing whether objects have been modified is a tricky subject, but the key point is that it’s very advantageous for the GC if objects haven’t been.