Er det rigtigt at java ikke kan håndtere større programmer?

Tags:    java

<< < 12 > >>
Hej! Hører alle steder fra, at Java ikke er god til at håndtere store programmer, som hvis den skulle lave et større spil, eller et stort program.

Er det rigtigt?



15 svar postet i denne tråd vises herunder
9 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
Minecraft spillet er skrevet i Java.
Ved ikke om du vil kalde det stort.




Minecraft spillet er skrevet i Java.
Ved ikke om du vil kalde det stort.


Minecraft kører ikke specielt hurtigt, synes ihvertfald tit der er problemer med hurtigheden.



Det er vel ikke Javas skyld at det ikke køre hurtigt.
Ligesom det ikke er HTMLs skyld at en hjemmeside indlæser langsomt.

Minecraft køre iøvrigt fint hurtigt på min computer, kommer jo også an på grafikkort, indstillinger, net forbindelse, osv.

Jeg tænker bare at i minecraft er der i hvert fald mange firkanter at holde styr på så det ville jeg da betegne som et stort system.

Men det jo ikke så tit jeg støder på programmer lavet i Java.
Ved ikke hvorfor, om det er fordi der er så nyt eller svært at skrive i eller der ikke er så mange der kender det.





For hvert objekt du opreter i java, har den en ekstra hukommelse på 8 byte.

En boolean fylder 1 byte, liegsom en byte også fylder en byte.

Hvis du vil vide mere, omkring hvad de andre typer fylder, kan du kigge nærmere på denne side: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Men, hvis du vil se, hvor meget en klasse fylder i hukommelsen, så skal du tage og ligge alle dine fields sammen, og så ligge et overhead på 8 bytes oven i hatten.

Så den følgende klasse:

Fold kodeboks ind/udJava kode 


fylder altså: 4(int) + 8(overhead) + 2(String +1byte for, hver char i Stringen)

Så, hvis bilen ikke har noget navn, så fylder den altså 14 bytes i hukommelsen, hvor at hvis den hedder "fiat" så fylder den: 4+8+2+4(bogstaver) = 18bytes

Det er vigtigt, at huske at den fylder, det pr. instance du har af klassen.
Men desto større dine klasser er, desto mindre procent mæssigt overhead har man i java.







En boolean fylder 1 byte, liegsom en byte også fylder en byte.


Nope. JVM'en kender slet ikke til disse typer (som Java har).
Tag f.eks. følgende Java kode:
Fold kodeboks ind/udJava kode 


Oversæt og disassemble:
Fold kodeboks ind/udKode 


Som du kan se i main metoden...den første instruktion lægger et 1-tal på stakken (en integer som fortolkes som 'true'). En integer...32 bits.
Dernæst gemmes den i den første lokale variabel. Igen, lokale variable er 32 bits i Java.

Der findes intet mindre end 32 bits i JVM'en. Arrays er optimeret lidt anderledes.

For hvert objekt du opreter i java, har den en ekstra hukommelse på 8 byte.


Forkert igen. Der er referencer til objektets klasse, der er reference counters til brug for garbage collectoren oooog så videre. Derudover følger der andet med...hver ny klasse har f.eks. et Class objekt plus informationer til JRE omkring hvordan den klasse kan bruges.

Og det er forskelligt fra 32 til 64 bit implementeringer fordi pointere fylder mere på en 64 bit maskine.



Indlæg senest redigeret d. 28.03.2012 11:34 af Bruger #2695
<< < 12 > >>
t