Also, micro optimization conversations at this scale would have a leg to stand on if we were talking about a tight loop with very simple instructions around it with no memory chasing; this is LinkedList traversal with equality checking we're talking about.
Sent from my phone On Aug 28, 2014 1:46 PM, "Vitaly Davidovich" <vita...@gmail.com> wrote: > There's no register pressure - the immediate (I.e. -1) is encoded directly > into the instruction, just like 0 would be. The time when 0 is > particularly useful is when you test for it in the zero bit of the flags > register (e.g. dec followed by jz, such as when counting a loop down to > 0). Otherwise, I don't see any advantage from machine code perspective. > The aforementioned cmov instruction is not without its own downsides, so > it's unclear which is better when branch probability isn't known a priori. > > The 1 byte code is unlikely to make any difference, unless jit is turned > off and you're running this through a tight loop in the interpreter (but if > one does that, perf conversation is moot :)). > > Sent from my phone > On Aug 28, 2014 1:28 PM, "Ulf Zibis" <ulf.zi...@cosoco.de> wrote: > >> >> Am 27.08.2014 um 17:51 schrieb Martin Buchholz: >> >>> The ArrayList version saves one byte of bytecode, and is therefore very >>> slightly better. We should bless that version and use it consistently. >>> >> >> +1 >> Additional argument: >> The LinkedList code requires to load 32/64-Bit -1 into CPU. This may take >> some time on some CPU and at least wastes memory footprint. >> Additionally register pressure increases. >> Vitaly, please correct me, if I'm wrong, just for learning more. >> >> Another advantage is that there is no problem if some implementation of >> indexOf() erroneously returns another negative value than -1. I remember >> some compare() implementations, which sometimes return different values >> than only -1, 0, +1. >> >> -Ulf >> >> ArrayList: >>>> >>>> public boolean contains(Object o) { >>>> return indexOf(o) >= 0; >>>> } >>>> >>>> LinkedList: >>>> >>>> public boolean contains(Object o) { >>>> return indexOf(o) != -1; >>>> } >>>> >>>> >>