From owner-freebsd-java Tue Aug 13 19:55:45 2002 Delivered-To: freebsd-java@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 16FE837B400 for ; Tue, 13 Aug 2002 19:55:40 -0700 (PDT) Received: from ns.gddsn.org.cn (ns.gddsn.org.cn [210.21.6.33]) by mx1.FreeBSD.org (Postfix) with ESMTP id A3DA043E65 for ; Tue, 13 Aug 2002 19:55:39 -0700 (PDT) (envelope-from hwh@ns.gddsn.org.cn) Received: from mail.gddsn.org.cn (gw [210.21.6.34]) by ns.gddsn.org.cn (Postfix) with ESMTP id 0EBCD5CE for ; Wed, 14 Aug 2002 10:55:33 +0800 (CST) Message-ID: <3D59C6A4.5020708@mail.gddsn.org.cn> Date: Wed, 14 Aug 2002 10:55:32 +0800 From: Huang wen hui User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; zh-CN; rv:1.0.0) Gecko/20020728 X-Accept-Language: zh-cn, zh-tw, en-us MIME-Version: 1.0 To: java Subject: Hotspot vm is extremely slower than nojit vm on current ? Content-Type: text/plain; charset=gb2312 Content-Transfer-Encoding: 7bit Sender: owner-freebsd-java@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org hi, Mostly hotspot vm is stable and fast, but I got problem with Thread.sleep. Look at the following simple program, on current hotspot vm is extreamly slow. %java -version java version "1.3.1-p7" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-p7-root-020727-22:30) Java HotSpot(TM) Client VM (build 1.3.1-internal, mixed mode) %~hwh/jre/bin/java -version java version "1.3.1-p7" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-p7-root-020727-22:30) Classic VM (build 1.3.1-p7-root-020727-22:30, green threads, nojit) %~hwh/jre/bin/java -jar TestTimer.jar ; java -jar TestTimer.jar query elapse time: 1230 query elapse time: 160177 ^^^^^^ %~hwh/jre/bin/java -jar TestTimer.jar ; java -jar TestTimer.jar query elapse time: 1407 query elapse time: 160256 ^^^^^^ %~hwh/jre/bin/java -jar TestTimer.jar ; java -jar TestTimer.jar query elapse time: 1354 query elapse time: 140221 ^^^^^^ --------------------------------------------------------------------------------------------------------- import java.util.*; import cn.gd.util.Timer; import cn.gd.util.TimerListener; import java.sql.*; public class TestTimer implements cn.gd.util.TimerListener { Timer timer = new Timer(this,20); public TestTimer() { timer.start(); } public synchronized void TimerEvent(Object object) { } public void destoryTimer() { timer.quit(); } public void query(){ try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/seismic?user=test&password=test"); String sql = "select * from station"; Statement st = conn.createStatement(); ResultSet rs = null; for(int i=0;i<100;i++) { rs = st.executeQuery(sql); while(rs.next()) { String sta = rs.getString("sta"); //System.out.println("sta is: "+sta); } rs.close(); } st.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ TestTimer tt =new TestTimer(); long now = new java.util.Date().getTime(); //Thread.sleep(60*1000); tt.query(); System.err.println("query elapse time: "+ (new java.util.Date().getTime() - now)); tt.destoryTimer(); } } public class Timer extends Thread{ private static ThreadGroup tGroup = new ThreadGroup("Timer"); // TimerListener to receive TimerEvent notifications TimerListener m_timerListener; // Number of seconds in each timer cycle int m_cycle; // Object to be supplied with the TimerEvent notification Object m_object; private boolean bQuit = false; public Timer(TimerListener timerListener, int cycle){ super(tGroup,"TimerThread"); m_timerListener = timerListener; m_cycle = cycle; m_object = null; } public Timer(TimerListener timerListener, int cycle, Object object){ super(tGroup,"TimerThread"); m_timerListener = timerListener; m_cycle = cycle; m_object = object; } public void run(){ this.setName("TimerThread"); // Loop until stopped while (!bQuit) { try { // Sleep for the clock cycle sleep(m_cycle * 1000); } catch (InterruptedException ex) { } // Fire a TimerEvent if (m_timerListener != null) { m_timerListener.TimerEvent(m_object); } } } public void quit() { bQuit = true; } } public interface TimerListener { void TimerEvent(Object object); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-java" in the body of the message