Avatar billede simonvalter Praktikant
17. juni 2005 - 13:21 Der er 9 kommentarer og
1 løsning

JVM og Compiler optimering

Jeg leder efter eksempler på hvilke optimerings teknikker som f.eks sun's JVM benytter og som compileren måske også kan foretage.
jvm specifikationen 91-9.2 siger ikke meget... der benyttes sikkert meget avancerede teknikker men det er nu mere noget i retning af strength reduction, loop unrolling, constant proagation.. og hvilke som bedst foretages af jvm.
Den bog jeg sidder med siger:

Warning

The optimizations described in this section can also be performed automatically by the JVM implementation itself. Generally, the more effort you go through to perform these optimizations yourself, the harder it will be for the JVM's optimizer to perform additional optimizations.


Et eksempel er at med strength reduction hvor x * 32 er langsommere end x << 5 .. men at forskellige operationer kan have forskellige hastighed på forskellige JVM's og derfor bliver optimeringen best foretaget af JVM.

En ting som loop unrolling kan også give en forøgelse i hastighed.. men på et system med begrænset plads er vi måske ikke interreseret i at bytecoden fylder meget mere.

Kender i andre eksempler..

og så lige et til spørgsmål... constant folding vil give et mindre footprint
f.eks

int seconds_in_a_day = 60*60*24;

vil blive til

bipush 60
bipush 60
imul
bipush 24
imul

Men det kan så igen optimeres til

ldc 86400

Af compileren... men kan man forvente at jvm også foretage denne optimering hvis compileren ikke gør det?

Så hvad jeg kort leder efter er eksempler, links elller hvad i nu kan bidrage med.
Avatar billede soreno Praktikant
17. juni 2005 - 13:35 #1
Sourcekoden til JVM er mig bekendt tilgængelig fra SUN.. :-)

Det er vist nok den her:
http://java.sun.com/j2se/jrl_download.html


Med hensyn til konstanter, så er det jo nemt at teste om kompileren foretager denne optimering;
public class Main {
  public static void main(String[] args) {
    int seconds_in_a_day = 60*60*24;
  }
}

Bliver til:
$ javap -c Main
Compiled from "Main.java"
public class Main extends java.lang.Object{
public Main();
  Code:
  0:  aload_0
  1:  invokespecial  #1; //Method java/lang/Object."<init>":()V
  4:  return

public static void main(java.lang.String[]);
  Code:
  0:  ldc    #2; //int 86400
  2:  istore_1
  3:  return

}

Så det lader til at kompileren har gennemskuet at det statisk har været muligt at foretage beregningen.
Avatar billede simonvalter Praktikant
17. juni 2005 - 13:38 #2
Jep jeg er klar over at javac foretager det. Jeg har også implementeret det i min egen compiler men det var mere for at vide om den eneste fordel er at det vil fylde mindre hvis jvm aligevel også vil foretage det.

Tror ikke jeg kan nå at sætte mig ind i sourcen til på mandag ;)
Avatar billede soreno Praktikant
17. juni 2005 - 13:40 #3
Suns kompiler er jo ikke den eneste kompiler til Java. Jeg formoder ikke at specifikationen nævner noget om krav til optimeringer ?

Så det må være leverandørafhængigt hvilke optimering der udføres og hvor effektive de er.
Avatar billede arne_v Ekspert
17. juni 2005 - 13:40 #4
java compilere er generelt temmeligt dumme - de laver kun ganske elementær
optimering

alt den reelle optimering sker i JVM'en

den skulle til gengæld være ret sofistikeret

(ikke mindst i IBM's og BEA's JVM'er)
Avatar billede arne_v Ekspert
17. juni 2005 - 13:41 #5
http://www-106.ibm.com/developerworks/ibm/library/j-berry/sidebar.html

har en meget overfladisk gennemgang af udviklingen
Avatar billede simonvalter Praktikant
17. juni 2005 - 13:41 #6
Ja det vil jeg også mene men jeg har ikke kunne opdrive noget information omkring hvad nogen af dem gør.
Avatar billede arne_v Ekspert
17. juni 2005 - 13:44 #7
Avatar billede arne_v Ekspert
17. juni 2005 - 13:50 #8
Avatar billede simonvalter Praktikant
17. juni 2005 - 14:10 #9
ok der var noget at gå igang med.. den sidste ser interesant ud. Du ligger bare et svar med det samme så vender jeg tilbage senere.
Avatar billede arne_v Ekspert
17. juni 2005 - 14:13 #10
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester