Andrei Alexandrescu wrote:
Weed wrote:
Weed пишет:

4. Java and C# also uses objects by reference? But both these of
language are interpreted. I assume that the interpreter generally with
identical speed allocates memory in a heap and in a stack, therefore
authors of these languages and used reference model.

Neither of these languages are interpreted, they both are compiled into
native code at runtime.
Oh!:) but I suspect such classes scheme somehow correspond with
JIT-compilation.


I guess allocation in Java occurs fast because of usage of the its own
memory manager.
I do not know how it is fair, but:
http://www.ibm.com/developerworks/java/library/j-jtp09275.html

"Pop quiz: Which language boasts faster raw allocation performance, the
Java language, or C/C++? The answer may surprise you -- allocation in
modern JVMs is far faster than the best performing malloc
implementations. The common code path for new Object() in HotSpot 1.4.2
and later is approximately 10 machine instructions (data provided by
Sun; see Resources), whereas the best performing malloc implementations
in C require on average between 60 and 100 instructions per call
(Detlefs, et. al.; see Resources)."

Meh, that should be taken with a grain of salt. An allocator that only bumps a pointer will simply eat more memory and be less cache-friendly. Many applications aren't that thrilled with the costs of such a model.

Andrei

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.

Of course, Java programmers tend to be less careful about memory allocation, so they usually consume **way** too much memory and lose the benefits of the moving GC.

Java-the-langauge and Java-the-platform are very efficient, even if the java frameworks and java patterns tend to bloated and nasty.

--benji

Reply via email to