Benji Smith wrote:
Actually, memory allocated in the JVM is very cache-friendly, since two
subsequent allocations will always be adjacent to one another in
physical memory. And, since the JVM uses a moving GC, long-lived objects
move closer and closer together.
Well the problem is that the allocation size grows quickly. Allocate and
dispose one object per loop -> pages will be quickly eaten.
for (...) {
JavaClassWithAReallyLongNameAsTheyUsuallyAre o = factory.giveMeOne();
o.method();
}
The escape analyzer could catch that the variable doesn't survive the
pass through the loop, but the call to method makes things rather tricky
(virtual, source unavailable...). So then we're facing a quickly growing
allocation block and consequently less cache friendliness and more
frequent collections.
Andrei