When Java's Garbage collector reclaims memory?

I know that Arrays of primitive type are implicitly initialized to 0 in java. So if I have a code :

public class Foo{
    public static void main(String args[]){
        int[] arr = new int[50];
        for(int i = 0; i < 30; i++){
            arr[i] = i;
        }
        for(int i = 0; i < 30; i++){      // This Line
             System.out.println(arr[i]);
        }
    }
}

I want to know if memory from arr[30] to arr[49] would already have been reclaimed by garbage collector at the line which has the comment?

Jon Skeet
people
quotationmark

I want to know if memory from arr[30] to arr[49] would already have been reclaimed by garbage collector at the line which has the comment?

No, absolutely not. The array is a single object. It's either reachable, or it's not reachable... and in this case, it's still reachable.

In a more complex example, if this were a String[], I wouldn't expect the strings referenced by elements arr[30] to arr[49] to be eligible for garbage collection, either. A very smart GC might be able to tell which parts of an array are unused and not include those in GC roots, but I don't think I've ever seen that. (It would have to know that no other code ever had a reference to the array, for one thing. It seems an unusual situation, and therefore one probably not worth optimizing.)

people

See more on this question at Stackoverflow