On Wed, 5 Jul 2023 16:00:11 GMT, Mandy Chung <mch...@openjdk.org> wrote:
>> Ok, thanks. This is similar to the solution I would have suggested. >> >> The only thing I'm unsure about is races. ClassValue allows multiple threads >> to race to compute the final value, but in the end only 1 is chosen that is >> returned to all threads. >> >> If multiple threads race to create a new proxy lookup here, they will all >> get a distinct lookup returned to them. I think this is okay? Though, it >> would mean we have less sharing of proxy classes. >> >> Maybe this code should synchronize on `r` to make sure only 1 lookup is >> created per interface. (Letting threads race to compute the value is also a >> possibility, but it also leads some threads to do work that is then >> discarded, and then the VM has to clean up the class they defined as well). > >> If multiple threads race to create a new proxy lookup here, they will all >> get a distinct lookup returned to them. I think this is okay? Though, it >> would mean we have less sharing of proxy classes. > > yes, that's okay. We can also do what you suggest to synchronize on `r`. I don't have a strong opinion, but I'm in favor of synchronizing (in a double-checked locking style), because the amount of work that would be discarded in the case of a race would be non-trivial. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13197#discussion_r1253523585