Most of the benefits of escape analysis do come from smal objects; things like iterators and classes implementing complex numbers. The iterator for an ArrayList would be an obvious example that with escape analysis would almost always be reduced down to
for (int i=0; i<list.size(); i++)
{
}
Yes, in general, escape analysis is going to help more with smaller objects - which is a good thing. Because the garbage collector seems to performs the worst when dealing with large numbers of small objects. Anything we can do to lessen its burden is good.
In your example, you seem to be implying that the Iterator object just totally disappears, but I seriously doubt that's going to happen. It's not going to be able to pull out concurrent modification checks, and it probably won't be able to pull out the redundant range checking either. That overhead is just noise in a normal application, but it turns into significant overhead in specialized cases.
To this day, I can't understand why the library code does silly things like perform redundant range checks.
God bless,
-Toby Reyelts