This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: System.currentTimeMillis() compile to native, accurate?
- From: "Craig A. Vanderborgh" <craigv at voxware dot com>
- To: "Rui Wang" <Rui dot Wang at newcastle dot ac dot uk>
- Cc: <java at gcc dot gnu dot org>
- Date: Thu, 09 Feb 2006 11:10:17 -0500
- Subject: Re: System.currentTimeMillis() compile to native, accurate?
- References: <9366880017F98D4EA02E4412380B82024E8FC8@moonraker.campus.ncl.ac.uk>
Rui Wang wrote:
Hi,
I wonder that how gcj maps Java's "System.currentTimeMillis()" to native
machine code.
In JVM, the time returned from "System.currentTimeMillis()" is not
accurate due to various of issues, such as: garbage collection,
thread management model, configurations, etc.
In native environment, what will happen? Is it accurate?
Thank you
Rui
The source code for System.currentTimeMillis(), from natSystem.cc, looks
like this:
jlong
java::lang::System::currentTimeMillis (void)
{
return _Jv_platform_gettimeofday ();
}
In turn, _Jv_platform_gettimeofday() looks like this:
// gettimeofday implementation.
jlong
_Jv_platform_gettimeofday ()
{
#if defined (HAVE_GETTIMEOFDAY)
timeval tv;
gettimeofday (&tv, NULL);
return (tv.tv_sec * 1000LL) + (tv.tv_usec / 1000LL);
#elif defined (HAVE_TIME)
return time (NULL) * 1000LL;
#elif defined (HAVE_FTIME)
struct timeb t;
ftime (&t);
return (t.time * 1000LL) + t.millitm;
#elif defined (ECOS)
// FIXME.
return _clock();
#else
// In the absence of any function, time remains forever fixed.
return 23000;
#endif
}
So in answer to your question: "is it accurate"? It depends. It
depends on what else is going on in your program. Under conditions
where currentTimeMillis() is called and your next lines of code receive
the result without being interrupted by another thread or by garbage
collection, currentTimeMillis() is sure to very closely reflect what
gettimeofday() would produce in a C program.
By the way, if I'm not mistaken "real Java" also uses a native method
implentation in JNI to provide about the same implementation for
currentTimeMillis(). In this regard, GCJ and JVM are more similar than
different.
hth,
craig vanderborgh
voxware incorporated
Confidentiality Note: This message may contain information which is privileged or confidential and exempt from disclosure under applicable law. If the reader of this message is not the intended recipient, or the employee responsible for delivering the message to the intended recipient, you are hereby NOTIFIED that any dissemination, distribution, retention, archiving, or copying of this communication is strictly prohibited. If you received this email in error, please notify Voxware immediately by return email to the sender.