Thanks for the suggestion Daniel, looks much nicer without the casting in the immutableCopy function as well!

I made a new patch with those reverted changes and it looks much nicer and still behaves as expected.

webrev: http://cr.openjdk.java.net/~ccleary/issues/webrevs-store/8246047/webrevs/webrev.03/


Thanks!

Conor


On 14/08/2020 15:49, Daniel Fuchs wrote:
Hi Conor,

Thanks for addressing this technical debt.

I don't think this is correct. You transformed the immutable
copy at line 137 into a shallow clone, since now both copies
share the same mutable list.

I suggest to revert the changes at lines:

66,67,144 and 145.

(and that will be much simpler in the bargain :-) )

best regards,

-- daniel


On 14/08/2020 15:37, Conor Cleary wrote:
Hi all,

Requesting some reviewers for a patch concerning JDK-8246047 'Replace LinkedList impl in net.http.websocket.BuilderImpl'. This patch replaces LinkedList data structures used in the net.http.websocket BuilderImpl class with ArrayLists. In particular, the 'headers' and 'subprotocols' Collections in the class are now assigned ArrayLists in the BuilderImpl constructors.

Some justifications for this change are as follows:

  * Sequential Access Times for ArrayLists are improved due to locality
    of reference (i.e ArrayList elements stored in same neighbourhood)
  * Get(index) operations are O(1) time complexity for ArrayLists as
    opposed to worst-case O(N-1) for LinkedLists
  * While insertion operations can be expensive (O(N) in the worst
    case), the 'headers' and 'subprotocols' lists are not modified after
    creation and so this is of minor concern

Additional justifications or challenges to them are welcome! The general idea is that ArrayLists out-perform LinkedLists in this particular scenario.

  * webrev:
http://cr.openjdk.java.net/~ccleary/issues/webrevs-store/8246047/webrevs/webrev.02/
  * bug: https://bugs.openjdk.java.net/browse/JDK-8246047


Conor


Reply via email to