Look please at this code:
public static void main(String[] args) {
    String[] array = new String[10000000];
    Arrays.fill(array, "Test");
    long startNoSize;
    long finishNoSize;
    long startSize;
    long finishSize;
    for (int called = 0; called < 6; called++) {
        startNoSize = Calendar.getInstance().getTimeInMillis();
        for (int i = 0; i < array.length; i++) {
            array[i] = String.valueOf(i);
        }
        finishNoSize = Calendar.getInstance().getTimeInMillis();
        System.out.println(finishNoSize - startNoSize);
    }
    System.out.println("Length saved");
    int length = array.length;
    for (int called = 0; called < 6; called++) {
        startSize = Calendar.getInstance().getTimeInMillis();
        for (int i = 0; i < length; i++) {
            array[i] = String.valueOf(i);
        }
        finishSize = Calendar.getInstance().getTimeInMillis();
        System.out.println(finishSize - startSize);
    }
}
The execution result differs from run to run, but there can be observed a strange behavior:
6510
4604
8805
6070
5128
8961
Length saved
6117
5194
8814
6380
8893
3982
Generally, there are 3 result: 6 seconds, 4 seconds, 8 seconds and they iterates in the same order.
Who knows, why does it happen?
UPDATE
After some playing with -Xms and -Xmx Java VM option the next results was observed:
The minimum total memory size should be at least 1024m for this code, otherwise there will be an OutOfMemoryError. The -Xms option influences the time of execution of for block:
It flows between 10 seconds for -Xms16m and 4 seconds for -Xms256m.
The question is - why the initial available memory size affect each iteration and not only the first one ?
Thank you in advance.
 
     
     
    