[gclist] Java vs. ML, particularly GC
Dmitry Lomov
dsl@tepkom.ru
Fri, 05 Jan 2001 18:17:07 +0300
"Krishnaswami, Neel" wrote:
>
> Dave Mason [mailto:dmason@sarg.Ryerson.CA] wrote:
> >
> > I have 10-20K lines of coding experience in SML, Caml, Scheme (, and
> > [skip]
> > 1) opinions on the accuracy of this perception?
>
> True, but keep in mind that ML and Ocaml have highly-optimizing
> native code compilers, and you are comparing it to a bytecode
> system. Of course, if native MLs exists on all the platforms you
> care about then Java still loses.
I suppose Dave compares to bytecode versions of OCaml and SML...
As to original question, I think the most important difference between
OCaml and SML and Java, is that the former two, being functional
makes less reference updates, thus allowing better performance
of generational collector.
In OCaml implementation, they use 2-age generational collector,
young heap is collected by a copying collector, and
major heap - by incremental mark&sweep. This is very fast,
as you understand - I suppose, the fastest possible.
Of course, as usually the big problem is pointers from
major heap to minor heap, but those are rare in functional
languages, so thay just have a table of references from major
to young heap (not very big) and include it in roots for
minor collections. At every minor collection, table is cleared.
Whenever table overfills, minor collection is performed.
For Java, this is unacceptable, because pointers from major
to minor heap will appear all the time.
Dmitry
_________________________________________________________________
Dmitry S. Lomov
mailto:dsl@tepkom.ru ICQ#: 20524819 (Rusty)
+7 (812) 428-46-57 (b) +7 (812) 295-94-15 (h)
http://oops.tepkom.ru