Review request for JDK-8134609: Allow constructors with same prototoype map to share the allocator map
Sundararajan Athijegannathan
sundararajan.athijegannathan at oracle.com
Wed Sep 16 11:11:13 UTC 2015
+1
NIce cleanup of PropertyMap as well!
-Sundar
On 9/16/2015 2:18 PM, Hannes Wallnoefer wrote:
> Thanks for the review!
>
> As discussed, in addition to the changes you suggested below I did
> some refactoring on the PropertyMap class, making more fields final to
> better reflect its immutable nature. I soon noticed that all the core
> fields (flags, field/spill boundaries, class name) could quite easily
> be made final except for the new shared map flags I introduced. That
> gave me an additional reason to turn shared proto map feature into a
> separete PropertyMap subclass (something I had already considered
> before).
>
> So I added the SharedPropertyMap subclass to represent the new shared
> prototype property maps. All the things fell quite nicely into place,
> and I'm much happier with the code now than with the first version. I
> also tweaked the property listener code to make it a bit simpler.
> Finally, I discovered an issue with unsetting prototypes with shared
> maps that was not handled correctly in the first version which I fixed
> and added/improved tests for.
>
> Please review the new webrev:
>
> http://cr.openjdk.java.net/~hannesw/8134609/webrev.01/
>
> Thanks,
> Hannes
>
> Am 2015-09-14 um 11:48 schrieb Attila Szegedi:
>> Overall, great work. Really well thought out; adding features to
>> runtimes to optimize special cases always has the possibility of
>> becoming complicated, and you have managed to keep the changes to the
>> minimum, and pretty well contained. E.g. I like how even before your
>> changes we have a fast path in ScriptObject.findProperty for the case
>> where the property is not in the prototype, so the shared proto check
>> there only kicks in when we do actually need to deal with prototypes,
>> etc.
>>
>> I only have some very small remarks:
>>
>> - AllocatorMap could use getSharedPrototypeMap() in various places
>> where it explicitly uses allocatorMap.getSharedProtoMap() now
>> - Debug.scriptStack() doesn't seem to be used
>> - PropertyMap.invalidateProtoGetSwitchPoint should be renamed
>> invalidateProtoSwitchPoint. invalidateAllProtoGetSwitchPoints too
>> - PropertyMap.invalidateSharedProtoSwitchPoint: there's the
>> "switchPoint != null && !switchPoint.hasBeenInvalidated()" predicate.
>> Is it possible for switchPoint to not be null and be invalidated? If
>> not, maybe hasBeenInvalidated should be an assert within if instead
>> - I wonder if "sharedProtoMap != myProto.getMap() ||
>> !myProto.getMap().isValidSharedProtoMap()" in
>> ScriptObject.checkSharedProtoMap and a similar predicate
>> "allocatorMap.getSharedProtoMap() != prototype.getMap() ||
>> !prototype.getMap().isValidSharedProtoMap())” in
>> ScriptFunction.getAllocatorMap() couldn’t be extracted into a single
>> method somewhere, if they share semantic similarity (syntactically
>> they look very similar)
>>
>> Attila.
>>
>>> On Sep 11, 2015, at 2:20 PM, Hannes Wallnoefer
>>> <hannes.wallnoefer at oracle.com> wrote:
>>>
>>> Please review JDK-8134609: Allow constructors with same prototoype
>>> map to share the allocator map:
>>>
>>> http://cr.openjdk.java.net/~hannesw/8134609/webrev/
>>>
>>> The details for this are a bit tricky, so I added some notes to the
>>> jira bug:
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-8134609?focusedCommentId=13843176&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13843176
>>>
>>>
>>> Thanks,
>>> Hannes
>
More information about the nashorn-dev
mailing list