Jbench v0.021 - Kompabilitätsprobleme sind gelöst - Bitte Testen!

Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
ne das liegt eher daran das dein "primetest" nicht realistisch und ausgeglichen ist :xmas:
 
werde mich nochmal mit den threadprioritäten auseinandersetzen müssen

Kannst dir die Arbeit sparen :)

Es wird nicht garantiert, dass ein höherpriorisierter Thread auch wirklich Vorrang vor einem niederpriorisiertem Thread bekommt. Die VM schiebt Synchronisationspunkte rein und entscheidet jeweils von neu wer den Prozessor bekommt. Zwar unterstützt java "fixed priority scheduling", aber es wird nicht garantiert LOL...... Dies siehst du sehr gut am folgenden Beispiel:

http://rapidshare.com/files/31337887/PriorityTest.java.html

Hier wird nach dem Round-Robin-Prinzip geschuldelt........ also jeder darf man ran und dabei wird die CPU "fair" zugeteilt.

Unter Linux (nicht RT) erhält man übrigens das gleiche Ergebnis.

Ich weiß nicht wie dein Code ausschaut. Jedoch sollte man zur Laufzeit versuchen so wenig möglich zu machen. Hier zu erwähnen was und wie das Endergebnis verfälschen könnte, würde zu weit ausarten. Insbesondere ist dies von der VM Abhängig.


Schick mir bitte mal deinen Code zu :-) Thx
Mail gibts per PM
 
Hier mein Code...

AppletBench.class
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

public class AppletBench extends Applet implements ActionListener,ItemListener
{

    Iteration panel;
    Prime     panel2;
    Ram       panel3;
    Font      schrift1,schrift2;
    Label     titel;
    Choice    choice1;
    Button    select,select2,select3;

    
    public void init()
    {
    setLayout(null);

    schrift1 = new Font("Serif",      Font.ITALIC,             35);
    schrift2 = new Font("Serif",      Font.ITALIC,             25);

    titel = new Label("Janchu88´s Java Benchmark v0.021");
    titel.setBounds(20,25,375,25);
    titel.setFont(schrift2);
    add(titel);

    choice1 = new Choice();
    choice1.setBounds(50,75,150,25);
    choice1.add("Iteration-Bench");
    choice1.add("Prime-Bench");
    choice1.add("Ram-Bench");
    choice1.addItemListener(this);
    add(choice1);
    
    select = new Button("Select");
    select.setBounds(250,75,100,25);
    select.addActionListener(this);
    select.setVisible(true);
    add(select);
    
    select2 = new Button("Select");
    select2.setBounds(250,75,100,25);
    select2.addActionListener(this);
    select2.setVisible(true);
    
    select3 = new Button("Select");
    select3.setBounds(250,75,100,25);
    select3.addActionListener(this);
    select3.setVisible(true);
    
    panel = new Iteration();
    panel.setBounds(100,125,200,300);
    
    panel2 = new Prime();
    panel2.setBounds(100,125,200,300);
    
    panel3 = new Ram();
    panel3.setBounds(100,125,200,300);

    add(panel);
    }
    
    
    
      public void actionPerformed(ActionEvent e)
    {
        Object quelle;
        quelle = e.getSource();
        if(quelle.equals(select))
        {
        remove(panel3);
        remove(panel2);
        add(panel);
        }
        
        if(quelle.equals(select2))
        {
        remove(panel3);
        remove(panel);
        add(panel2);
        }

         if(quelle.equals(select3))
        {
        remove(panel);
        remove(panel2);
        add(panel3);
        }


    }
    
    public void itemStateChanged(ItemEvent e)
    {
        String s;
        s = choice1.getSelectedItem();

        if (s.equals("Iteration-Bench"))
        {
        remove(select3);
        remove(select2);
        add(select);
        }

        if (s.equals("Prime-Bench"))
        {
        remove(select3);
        remove(select);
        add(select2);
        }
        
        if (s.equals("Ram-Bench"));
        {
        remove(select);
        remove(select2);
        add(select3);
        }
    }



}

Iteration.class
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

class Iteration extends Panel implements ActionListener
{
     Button    iteration;
     Label     count;
     Label     zeit;
     Font      schrift1,schrift2;


    Iteration()
    {

    setLayout(null);

    schrift1 = new Font("Serif",      Font.ITALIC,             35);
    schrift2 = new Font("Serif",      Font.ITALIC,             25);

    iteration = new Button("Start Iteration-Bench");
    iteration.setBounds(25,25,150,25);
    iteration.addActionListener(this);
    add(iteration);

    count = new Label("");
    count.setBounds(50,75,125,25);
    count.setFont(schrift1);
    add(count);

    zeit = new Label("");
    zeit.setBounds(50,125,125,25);
    zeit.setFont(schrift2);
    add(zeit);
    
    setVisible(true);
    }


     public void iteration()
    {
      double t0,t1,t2;
      double min = 1.0;
      double max = 2.0;
      double halb = 1.0,halbpow;
      double a = 0.0, iterationint = 5000000.0;
      String t2str,prozentstr;
      double prozent;

      t0 = System.currentTimeMillis();
      while(a < iterationint)
      {
        halb = (min + max) / 2.0;
        halbpow = Math.pow(halb,2);

        if(halbpow > 2.0)
        {
        max = halb;
        }

        else
        {
        min = halb;
        }

        a++;

        prozent = (a/iterationint)*100.0;
        prozentstr = Cio.format(prozent,1,1);
        count.setText(prozentstr + "%");

      }

      t1 = System.currentTimeMillis();

      t2 = (t1-t0)/1000.0;

      t2str = Double.toString(t2);
      zeit.setText(t2str + "s");

    }

      public void actionPerformed(ActionEvent e)
    {
        Object quelle;
        quelle = e.getSource();
        if ( quelle.equals(iteration)) iteration();

    }

}

Iteration.class
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

class Prime extends Panel implements ActionListener
{
    Button    prime;
    Label     zeit;
    Font      schrift1,schrift2;
    Label     count;



    public Prime()
    {
    setLayout(null);
    
    schrift1 = new Font("Serif",      Font.ITALIC,             35);
    schrift2 = new Font("Serif",      Font.ITALIC,             25);

    prime = new Button("Start Prime-Bench");
    prime.setBounds(25,25,150,25);
    prime.addActionListener(this);
    add(prime);

    count = new Label("");
    count.setBounds(50,75,125,25);
    count.setFont(schrift1);
    add(count);
    
    zeit = new Label("");
    zeit.setBounds(50,125,125,25);
    zeit.setFont(schrift2);
    add(zeit);
    
    setVisible(true);
    
    }


    public void prime()
    {
       //Variablen
       int        rest;
       int        teiler;
       int        zahl = 2;
       double     prozent;
       double     t0,t1,t2;
       String     t2str;
       String     prozentstr;

       //Beginn
       t0 = System.currentTimeMillis();
       
       for(int zaehler = 0; zaehler < 300000; zaehler++)
       {

       
       rest = zahl % 2;
       
         if(rest == 1)
         {

           teiler = 3;

           do
           {
           rest = zahl % teiler;

           teiler++;


           }
           while(rest>0);




         }

        prozent = (zaehler / 300000.0 )*100.0;
        prozentstr = Cio.format(prozent,1,1);
        count.setText(prozentstr + "%");
        
        
         zahl++;

       }

      t1 = System.currentTimeMillis();

      t2 = (t1-t0)/1000.0;

      t2str = Double.toString(t2);
      zeit.setText(t2str + "s");

    }
    






      public void actionPerformed(ActionEvent e)
    {
        Object quelle;
        quelle = e.getSource();
        if(quelle.equals(prime));
        {
        prime();
        }


    }

}

Ram.class - der begonnene Versuch einen Speicherlastigeren Benchmark zu intergrieren mit Hilfe eines Arrays. War aber noch am testen wieviel Speicher ich hab , wieviel frei ist etc...
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;

class Ram extends Panel implements ActionListener
{

    Label     count,count2;
    long      freeBytes;
    long      totalBytes;
    String    free,total;
    Font      schrift1,schrift2;


    public Ram()
    {

    int[] zahl;
    zahl = new int[10000];


    schrift1 = new Font("Serif",      Font.ITALIC,             35);
    schrift2 = new Font("Serif",      Font.ITALIC,             25);

    count = new Label("");
    count.setBounds(50,75,300,25);
    add(count);

    count = new Label("");
    count.setBounds(50,125,300,25);
    add(count);


    setVisible(true);

    Runtime rt = java.lang.Runtime.getRuntime();
    freeBytes = rt.freeMemory();
    totalBytes = rt.totalMemory();

    free = Long.toString(freeBytes);
    total = Long.toString(totalBytes);

    count.setText("freie Bytes: " + free + " | gesamt: " + total );
    

     for(int i = 0 ; i < 10000; i++)
     {
     zahl[i] = i ;
     }
    
    Runtime rx = java.lang.Runtime.getRuntime();
    freeBytes = rx.freeMemory();
    totalBytes = rx.totalMemory();

    free = Long.toString(freeBytes);
    total = Long.toString(totalBytes);

    count2.setText("freie Bytes: " + free + " | gesamt: " + total );
    
    
    }


      public void actionPerformed(ActionEvent e)
    {
        Object quelle;
        quelle = e.getSource();
    }

}

Cio.Class (benutze nur die Methode format um double werte zu runden für die prozentausgabe...)
Code:
import java.io.*;
import java.text.*;

public class Cio
{

  private static int i=0;
  private static double d=0.0;
  private static String s="";
  private static char c = ' ';
  private static String version = "26.01.2007";


  // Eine beliebige Eingabe wird ausgewertet
  private static String read()
  {
    BufferedReader eingabe = new BufferedReader(
      new InputStreamReader(System.in));
    try
    {
      s = eingabe.readLine();
    }
    catch (Exception e)
    {
      s = "";
    }
    try
    {
      i = Integer.parseInt(s);
    }
    catch (Exception e) {
      i = 0;
    }
    try
    {
      d = Double.parseDouble(s);
    }
    catch (Exception e) {
      d = 0.0;
    }
    try
    {
      char[] ca = s.toCharArray();
      c = ca[0];
    }
    catch (Exception e)
    {
      c = ' ';
    }

    return(s);
  }



  /**
   *
   * Eingabe eines Strings von der Tastatur
   *
   */
  public static String readString()
  {
    read(); return(s);
  }


  /**
   *
   * Ausgabe eines Strings und anschliessende
   * Eingabe eines Strings von der Tastatur
   *
   */
  public static String readString(String meldung)
  {
    print(meldung); read(); return(s);
  }


  /**
   *
   * Eingabe eines int-Wertes von der Tastatur
   *
   */
  public static int readInt()
  {
    read(); return(i);
  }


  /**
   *
   * Ausgabe eines Strings und anschliessende
   * Eingabe eines int-Wertes von der Tastatur
   *
   */
  public static int readInt(String meldung)
  {
    print(meldung); read(); return(i);
  }



  /**
   *
   * Eingabe eines double-Wertes von der Tastatur
   *
   */
  public static double readDouble()
  {
    read(); return(d);
  }


  /**
   *
   * Ausgabe eines Strings und anschliessende
   * Eingabe eines double-Wertes von der Tastatur
   *
   */
  public static double readDouble(String meldung)
  {
    print(meldung); read(); return(d);
  }


  /**
   *
   * Eingabe eines char-Wertes von der Tastatur
   *
   */
  public static char readChar()
  {
    read(); return(c);
  }


  /**
   *
   * Ausgabe eines Strings und anschliessende
   * Eingabe eines char-Wertes von der Tastatur
   *
   */
  public static char readChar(String meldung)
  {
    print(meldung); read(); return(c);
  }


  /**
   *
   * Ausgabe eines Strings auf dem Monitor
   *
   */
  public static void print( String x )
  {
    System.out.print(x);
  }


  /**
   *
   * Ausgabe eines int-Wertes auf dem Monitor
   *
   */
  public static void print( int x )
  {
    System.out.print(x);
  }



  /**
   *
   * Ausgabe eines double-Wertes auf dem Monitor
   *
   */
  public static void print( double x )
  {
    System.out.print(x);
  }



  /**
   *
   * Ausgabe einer Leerzeile auf dem Monitor
   *
   */
  public static void println()
  {
    System.out.println();
  }



  /**
   *
   * Ausgabe eines Strings auf dem Monitor mit Zeilenwechsel
   *
   */
  public static void println( String x )
  {
    System.out.println(x);
  }



  /**
   *
   * Ausgabe eines int-Wertes auf dem Monitor mit Zeilenwechsel
   *
   */
  public static void println( int x )
  {
    System.out.println(x);
  }



  /**
   *
   * Ausgabe eines double-Wertes auf dem Monitor mit Zeilenwechsel
   *
   */
  public static void println( double x )
  {
    System.out.println(x);
  }

  /**
   *
   * Formatierung eines int-Wertes <br>
   * laenge = Gesamtlänge des Ausgabestrings <br>
   * Die Anzahl der Stellen wird in jedem Fall vollstaendig
   * dargestellt, auch wenn eine zu geringe Gesamtlaenge angegeben
   * wurde <br>
   * Bei einem Wert laenge = 0 werden alle Stellen angezeigt
   *
   */
     public static String format(int i, int laenge)
    {
        String s = String.valueOf(i);
        int len = s.length();
        while(len<laenge)
        {
            s = " " + s;
            len = s.length();
        }
        return s;
    }
    
  /**
   *
   * Formatierung eines long-Wertes <br>
   * laenge = Gesamtlänge des Ausgabestrings <br>
   * Die Anzahl der Stellen wird in jedem Fall vollstaendig
   * dargestellt, auch wenn eine zu geringe Gesamtlaenge angegeben
   * wurde <br>
   * Bei einem Wert laenge = 0 werden alle Stellen angezeigt
   *
   */
     public static String format(long i, int laenge)
    {
        String s = String.valueOf(i);
        int len = s.length();
        while(len<laenge)
        {
            s = " " + s;
            len = s.length();
        }
        return s;
    }


  /**
   *
   * Formatierung eines double-Wertes<br>
   * laenge = Gesamtlänge des Ausgabestrings<br>
   * dezi   = Anzahl der Nachkommastellen<br>
   * Die Anzahl der Vorkommastellen wird in jedem Fall vollständig
   * dargestellt, auch wenn eine zu geringe Gesamtlänge angegeben
   * wurde; d.h. bei einem Wert laenge = 0 werden alle
   * Vorkommastellen angezeigt.
   *
   */
   public static String format(double x, int laenge, int dezi)
   {
        String s;                 // Ausgabestring
        int len;                  // Laenge von Strings
        String formatString;      // beschreibt die Formatierung
        DecimalFormatSymbols dfs; // Dezimalpunkt etc.
        DecimalFormat df;         // Objekt zur Formatierung
        final String NULLEN = "000000000000000000000000000000";
        final String LEER   = "                              ";

        dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(','); // hier nicht erforderlich

        // Formatstring und Formatobjekt bilden mit
        // der richtigen Anzahl der Nachkommastellen
        formatString = "0." + NULLEN.substring(0,dezi);
        df = new DecimalFormat(formatString,dfs);

        // Formatierte Zahl als String
        s = df.format(x);

        // Gesamtlaenge bilden
        len = s.length();
        if (len>laenge) laenge=len;
        s = LEER + s;
        len = s.length();
        s = s.substring(len-laenge,len);

        // Rückgabe der formatierten Zahl als String
        return(s);
   }



  /**
   *
   * Ausgabe eines formatierten double-Wertes auf dem Monitor<br>
   * laenge = Gesamtlänge des Ausgabestrings<br>
   * dezi   = Anzahl der Nachkommastellen<br>
   * Die Anzahl der Vorkommastellen wird in jedem Fall vollständig
   * dargestellt, auch wenn eine zu geringe Gesamtlänge angegeben
   * wurde; d.h. bei einem Wert laenge = 0 werden alle
   * Vorkommastellen angezeigt.
   *
   */
   public static void printf(double x, int laenge, int dezi)
   {
        String s = format(x,laenge,dezi);
        System.out.print(s);

   }



  /**
   *
   * Ausgabe eines formatierten double-Wertes auf dem Monitor<br>
   * mit Zeilenwechsel.<br>
   * laenge = Gesamtlänge des Ausgabestrings<br>
   * dezi   = Anzahl der Nachkommastellen<br>
   * Die Anzahl der Vorkommastellen wird in jedem Fall vollständig
   * dargestellt, auch wenn eine zu geringe Gesamtlänge angegeben
   * wurde; d.h. bei einem Wert laenge = 0 werden alle
   * Vorkommastellen angezeigt.
   *
   */
   public static void printlnf(double x, int laenge, int dezi)
   {
        String s = format(x,laenge,dezi);
        System.out.println(s);
   }


    /**
    *  Zufallswert im Bereich zwischen zwei Werten
    */
    public static int zufall(int von, int bis)
    {
        return( von + (int)((bis-von+1)*Math.random() ));
    }
    
    
    /**
    *  Zeitverzoegerung in Millisekunden
    */
    public static void delay(int millisec)
    {
        try { Thread.sleep(millisec);}
        catch (InterruptedException e) {}
    }
    
    /**
    * Rückgabe der Versionsbezeichnung (Datum / Autor)
    */
    public static String getVersion()
    {
        return "Version : " + version + " / W.Gerdes";
    }
    
    /**
    * Ausgabe der Versionsbezeichnung (Datum / Autor)
    */
    public static void printVersion()
    {
        System.out.println("-------------------------------------------------");
        System.out.println(" Klasse       : CIO                              ");
        System.out.println(" Version      : " + version);
        System.out.println(" Autor        : W.Gerdes                         ");
        System.out.println(" Beschreibung : Hilfsklasse fuer Textkonsole     ");
        System.out.println("-------------------------------------------------");
    }



}
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh