8062490: Out of memory problems, as untouched array datas didn't go directly to SparseArrayDatas, but dragged very large int arrays around.

Mon, 03 Nov 2014 14:59:34 +0100

author
lagergren
date
Mon, 03 Nov 2014 14:59:34 +0100
changeset 1085
b00442519275
parent 1084
4ac6934c6cc2
child 1086
d0b26e6f602c

8062490: Out of memory problems, as untouched array datas didn't go directly to SparseArrayDatas, but dragged very large int arrays around.
Reviewed-by: attila, sundar

src/jdk/nashorn/internal/runtime/arrays/ArrayData.java file | annotate | diff | comparison | revisions
src/jdk/nashorn/internal/runtime/arrays/SparseArrayData.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/jdk/nashorn/internal/runtime/arrays/ArrayData.java	Mon Nov 03 13:58:52 2014 +0100
     1.2 +++ b/src/jdk/nashorn/internal/runtime/arrays/ArrayData.java	Mon Nov 03 14:59:34 2014 +0100
     1.3 @@ -98,6 +98,10 @@
     1.4          @Override
     1.5          public ArrayData ensure(final long safeIndex) {
     1.6              if (safeIndex > 0L) {
     1.7 +                if (safeIndex >= SparseArrayData.MAX_DENSE_LENGTH) {
     1.8 +                    return new SparseArrayData(this, safeIndex + 1);
     1.9 +                }
    1.10 +                //known to fit in int
    1.11                  return toRealArrayData((int)safeIndex).ensure(safeIndex);
    1.12             }
    1.13             return this;
     2.1 --- a/src/jdk/nashorn/internal/runtime/arrays/SparseArrayData.java	Mon Nov 03 13:58:52 2014 +0100
     2.2 +++ b/src/jdk/nashorn/internal/runtime/arrays/SparseArrayData.java	Mon Nov 03 14:59:34 2014 +0100
     2.3 @@ -38,6 +38,11 @@
     2.4  class SparseArrayData extends ArrayData {
     2.5      static final long MAX_DENSE_LENGTH = 16 * 512 * 1024;
     2.6  
     2.7 +    static {
     2.8 +        // we must break into sparse arrays before we require long indexes
     2.9 +        assert MAX_DENSE_LENGTH <= Integer.MAX_VALUE;
    2.10 +    }
    2.11 +
    2.12      /** Underlying array. */
    2.13      private ArrayData underlying;
    2.14  

mercurial