On 6/17/20 8:08 AM, Peter Levart wrote:

On 6/16/20 5:15 PM, Chris Hegarty wrote:
The caching is on a per-stream-field shape basis, which should be consistent in the common case, but of course is not always guaranteed to be the case, hence the need for the cache. I think that this should be fine, since the ObjectStreamClass ( that holds the cache ) is already itself cached as a weak reference. But I did wonder if the size of this new cache should be limited. Probably not worth the complexity unless it is an obvious issue.

I don't think there will normally be many different shapes of the same class deserialized by a single VM. Each shape means that a different version of that class must have existed to serialize it. There could be deliberate "forged" streams trying to inflate the cache. Are you worried about that? In that case I can add logic to limit the number of different shapes kept with a simple LRA (Least Recently Added) strategy that would not hurt access performance.


Regards, Peter

So, here's an attempt to limit the number of different shapes cached per class which doesn't affect the fast-path performance:


http://cr.openjdk.java.net/~plevart/jdk-dev/RecordsDeserialization/webrev.03/


Regards, Peter


Reply via email to