> On 10 May 2019, at 09:52, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> <snip>
> 
> Is there a case where returning > MAX_ARRAY_SIZE will not lead to OOME?
> 
> If this utility method is meant for re-sizing arrays only (currently it is 
> only used for that), then perhaps the method could throw OOME explicitly in 
> this case. You already throw OOME for the overflow case, so currently the 
> method is not uniform in returning exceptional values (i.e. values that lead 
> to exceptions).
> 
> Unless you expect some VMs to tolerate arrays as large as Integer.MAX_VALUE ?

I think the proposed behaviour is equivalent to what there is now. After all,
it's a refactoring effort and as such *should* result in equivalent behaviour.

If understand you correctly, your question can be answered by answering 

    Why there is MAX_ARRAY_SIZE in the first place?

> These lines:
> 
>  607         int newCapacity = oldCapacity + preferredGrowBy;
>  608         if (preferredGrowBy < growAtLeastBy) {
>  609             newCapacity = oldCapacity + growAtLeastBy;
>  610         }
> 
> ...could perhaps be more easily grasped as:
> 
> int newCapacity = oldCapacity + Math.max(preferredGrowBy, growAtLeastBy);

I'm not an expert here, but if I understood Ivan correctly, the purpose was to
avoid branching. Maybe intrinsified Math.max is superior in both readability and
performance. I simply don't know. If you feel strongly about using it, you could
maybe compare those approaches by benchmarking.

Reply via email to