Return-Path: Delivered-To: apmail-incubator-harmony-dev-archive@www.apache.org Received: (qmail 35522 invoked from network); 17 May 2005 09:35:20 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 17 May 2005 09:35:20 -0000 Received: (qmail 15432 invoked by uid 500); 16 May 2005 22:26:33 -0000 Delivered-To: apmail-incubator-harmony-dev-archive@incubator.apache.org Received: (qmail 15372 invoked by uid 500); 16 May 2005 22:26:32 -0000 Mailing-List: contact harmony-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: harmony-dev@incubator.apache.org Delivered-To: mailing list harmony-dev@incubator.apache.org Received: (qmail 15349 invoked by uid 99); 16 May 2005 22:26:32 -0000 X-ASF-Spam-Status: No, hits=0.1 required=10.0 tests=FORGED_RCVD_HELO X-Spam-Check-By: apache.org Received-SPF: neutral (hermes.apache.org: local policy) Received: from mail.apex.net.au (HELO mail.apex.net.au) (203.20.62.10) by apache.org (qpsmtpd/0.28) with ESMTP; Mon, 16 May 2005 15:26:30 -0700 Received: from anu.edu.au (xact-158-78.apex.net.au [202.55.158.78]) by mail.apex.net.au (8.11.6/8.11.6) with ESMTP id j4GMQFl22332 for ; Tue, 17 May 2005 08:26:15 +1000 Message-ID: <42891E03.104@anu.edu.au> Date: Tue, 17 May 2005 08:26:11 +1000 From: Steve Blackburn Reply-To: Steve.Blackburn@anu.edu.au Organization: Australian National University User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040510 X-Accept-Language: en-us, en MIME-Version: 1.0 To: harmony-dev@incubator.apache.org Subject: Persistence (was Re: Introduction, and a question) References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N If you're interested in snapshot and restart of VM state, your biggest issue is concurrency. There is a large literature on "orthogonal persistence". In a nutshell, the goal of orthogonal persistence is that persistence be a properprty orthogonal to all other aspects of the language---the entire program state should persist. The checkpoint() model is the simplest, but has two drawbacks: a) injecting persistent-specific code into your program, and more importantly b) the problem of acquiring a consistent cut across threads. Implementing a trivial checkpoint mechanism is not difficult at all---it has been done many times for Java. People have also used such mechanisms to perform thread migration in distributed Java systems. Implementing full orthogonal persistence is more challenging, particularly with regards to language design issues (how do you combine concurrency and persistence semantics in a way that does not impinge on the language?). Many years ago, we build an orthogonally persistent Java (OPJ) which performed well. While other folks embedded their mechanism in the VM, we did ours exclusively by transforming classes at classloading time. We eventually generallized this to be able to extend java semantics in all sorts of interesting ways. We called it the Semantic Extension Framework (SEF). I moved to the US and the key author left for industry and so our SEF never really made it into the mainstream. A year or so later we saw AOP emerge, which carries many of the same ideas. There was also a major project at Sun (http://research.sun.com/forest) which worked on this. Their approach was to modify the VM internals. There is a project at ANU (dJVM) looking at distributed jvms (http://djvm.anu.edu.au/). The SEF and OPJ work was a lot of fun, but I don't think it has much to do with core VM design as I think the best approach is to build it using the dynamic classloader. :-) Cheers, --Steve http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#opj-pos9 http://cs.anu.edu.au/~Steve.Blackburn/pubs/abstracts.html#fly-pjw3