Gå til innhold

Java - for ressurskrevende?


Anbefalte innlegg

Har nå drevet med Java i et par måneder og personlig liker jeg språket veldig godt.

Men under en samtale med noen kompiser for et par dager siden kom det opp at de synes Java var alt for ressurskrevende.

Jeg vet ikke helt hva jeg skal si i denne sammenheng, hva er deres mening?

 

Er Java for ressurskrevende imotsetning til feks C?

Lenke til kommentar
Videoannonse
Annonse

Java er svært raskt. Det har bedret seg MASSE de siste årene. Folk som sier Java er treigt vet rett og slett ikke hva de snakker om. Faktisk så har jeg lest flere plasser at Java fint kunne ha blitt brukt til å utvikle moderne 3D-spill, med de kravene som det medfører. Noen hevder også at Java kan komme til å overta store andeler her pga kortere utvikllingstid (Java har mange egenskaper som gjør at det er "lettere" og raskere å utvikle systemer enn f.eks C/C++, blandt annet slipper man peker-maset, samt Java har automatisk garbage-collection), noe som en del spillutviklere nok hadde satt pris på. (det betyr ikke at C/C++ er dårlig!!!). Mulig C/C++ fortsatt er hakket raskere, men tror ikke det vil ha noen betydning i prasis. Grunnen er at Java bruker en VM i bunnen mens C/C++ slipper dette mellom-laget. Derimot får man et mer flyttbart system med Java, men det er en annen diskusjon :)

 

Det skal derimot nevnes at Swing, GUI-biblioteket Java (ofte) bruker, kan oppfattes som litt lite responsivt (treigt). Hvorfor dette ikke har blitt rettet på enda vet jeg ikke, men mulig det har blitt bedre enn det var, og det er mulig det vil bli mye bedre. Det bør nok noen andre svare på :)

 

EDIT: Skrivefeil + jeg glemte noe :p

Endret av smetho
Lenke til kommentar

Java har en del mer minneoverhead enn C/C++, ellers er det faktisk ikke så tregt. "Just in time" kompilatoren begynner å bli bra (ikke så bra som de beste C kompilatorene), java kode blir ikke 'tolket' lenger, men kompilert til maskinkode rett før kjøring, så det er ikke noen teoreriske grunner til at det skal være tregt annet enn at oppstarten kan ta noen sekunder ekstra.

 

Om 10 år vil alle bruke samme modell, M$ er allerede på god vei (i Longhorn vil mye være .NET "common language runtime" og ikke maskinkode).

Endret av MailMan13
Lenke til kommentar
Om 10 år vil alle bruke samme modell, M$ er allerede på god vei (i Longhorn vil mye være .NET "common language runtime" og ikke maskinkode).

Hva har egentlig Microsoft å tjene på det? .NET kjøres vel bare på Windows-maskiner (ja, jeg har hørt om Mono), så da kunne det vel like gjerne blitt kompilert rett til maskinkode?

Lenke til kommentar

det gjenstår å se om Java vil ta over som programmeringsspråk på spillfronten. Mange jeg kjenner som er java-tilhengere har sagt dette i flere år nå at java vil snart ta over. Det beste eksempelet er kanskje FlightGear, det funker, men er ikke akkurat rakettmaskin i forhold til flysimmer skrevet i C/C++. Et av problemet til Java er at du IKKE har pekere, eller du har pekere, men du får ikke kontroll over dem som utvikler. Alle objekter er adressert som en referanse (kjapt), mens alle variabler er adressert som verdi (tregt). Dette har kanskje ikke så mye å si på moderne systemer, men det har litt å si.

 

Dessuten så er det som nevnt tidligere, at et Javaprogram er kompilert som byte-kode, hvilket betyr at du trenger en vitruell maskin for å oversette koden til den gjeldende CPU'en noe som vil bruke ekstra resurser enten du vil eller ikke.

 

Og en annen ting, det er mange som ikke er klar over at en C/C++ kildekode KAN skrives platform uavhengig. (Dvs et spill som benytter seg av OpenGL og IKKE DirectX, kan portes lett over til et UNIX eller Mac miljø hvis utvikleren har vært litt smart.)

Lenke til kommentar
det gjenstår å se om Java vil ta over som programmeringsspråk på spillfronten. Mange jeg kjenner som er java-tilhengere har sagt dette i flere år nå at java vil snart ta over. Det beste eksempelet er kanskje FlightGear, det funker, men er ikke akkurat rakettmaskin i forhold til flysimmer skrevet i C/C++.

Eller Jake2.

 

Et av problemet til Java er at du IKKE har pekere, eller du har pekere, men du får ikke kontroll over dem som utvikler. Alle objekter er adressert som en referanse (kjapt), mens alle variabler er adressert som verdi (tregt). Dette har kanskje ikke så mye å si på moderne systemer, men det har litt å si.

Det er ingenting magisk ved pekere som gjør at ting går fortere. Mener du virkelig at det skulle ta lenger tid å sende tallet '192' enn en minneadresse hvor tallet ligger lagret? ;)

 

Det som kan være et problem med Javas minnehåndtering er at du ikke kan styre når og hvordan minne deallokeres, eller akkurat hvor det allokeres i første omgang. Spillprogrammerere er kontrollfriker og vil styre alt, men i Java blir dette opp til VM'en, og man er ikke garantert konsistente resultater. Ta objekt pooling, f.eks., som var en mye brukt optimaliseringsteknikk i Java's tidlige dager, men i dag kan gi svært mye overhead.

 

Dessuten så er det som nevnt tidligere, at et Javaprogram er kompilert som byte-kode, hvilket betyr at du trenger en virtuell maskin for å oversette koden til den gjeldende CPU'en noe som vil bruke ekstra resurser enten du vil eller ikke.

Dette virker jo begge veier. Det tar litt ekstra ressurser å starte programmet, men når det først er i gang så kjører det i et miljø hvor koden profileres konstant, og kan optimaliseres for akkurat cpu'en den går på, basert på faktiske run-time data. JVM'en kan gå mye lenger enn en C++ -kompilator her, og f.eks. inline bibliotek-kall om det skulle være lønnsomt. I teorien kan man vel gå like langt med C++ om man vet alt om cpu'en programmet skal kjøre på, men i praksis blir vel ting lettere med Java.

 

Nyere JVM'er kan vel også lagre maskinkoden når du avslutter programmet, slik at oppstart går fortere når du først har kjørt programmet en gang.

 

Og en annen ting, det er mange som ikke er klar over at en C/C++ kildekode KAN skrives platform uavhengig. (Dvs et spill som benytter seg av OpenGL og IKKE DirectX, kan portes lett over til et UNIX eller Mac miljø hvis utvikleren har vært litt smart.)

Det største problemet med C++ er vel at programmereren får ubegrensede muligheter til å skyte seg selv (og resten av teamet) i foten. Dessuten liker jeg Javas klassebiblioteker.

Lenke til kommentar
Det skal derimot nevnes at Swing, GUI-biblioteket Java (ofte) bruker, kan oppfattes som litt lite responsivt (treigt). Hvorfor dette ikke har blitt rettet på enda vet jeg ikke, men mulig det har blitt bedre enn det var, og det er mulig det vil bli mye bedre. Det bør nok noen andre svare på :)

Synes Swing er relativt snappy nå om dagen jeg. Fikk vel akselerering gjennom OpenGL med 1.5-jvm'en. Men så er det ikke så lenge siden jeg oppgraderte pc'en heller.

Lenke til kommentar
Et av problemet til Java er at du IKKE har pekere, eller du har pekere, men du får ikke kontroll over dem som utvikler.

Alle objektreferanser i Java er pekere (ikke mulig å legge objekter på stack eller kopiere uten eksplisitte clone() kall), så det med parameteroverføring er så effektivt så det kan bli. Nytt minne kan bare allokeres med "new" operatoren.

 

Forskjellen er at du ikke kan adressere direkte på stakken og instansiere objekter der, men det er jo egentlig bare en fordel når det kommer til utviklingstid og debugging siden det 'tvinger' frem en konsistent måte å gjøre det på.

 

Oppsummert: Et objekt ligger alltid i heap og et objekt som parameter til en metode er alltid en referanse. Resultatet er at Java er fritt for segfaults.

 

Synes Swing er relativt snappy nå om dagen jeg. Fikk vel akselerering gjennom OpenGL med 1.5-jvm'en. Men så er det ikke så lenge siden jeg oppgraderte pc'en heller.

Det er vel bare med -Dsun.java2d.opengl=True, og såvidt jeg har forstått blir ikke det default før i Java 1.6 til neste år. (et par bugs igjen)

Endret av MailMan13
Lenke til kommentar
det gjenstår å se om Java vil ta over som programmeringsspråk på spillfronten. Mange jeg kjenner som er java-tilhengere har sagt dette i flere år nå at java vil snart ta over. Det beste eksempelet er kanskje FlightGear, det funker, men er ikke akkurat rakettmaskin i forhold til flysimmer skrevet i C/C++.

Eller Jake2.

 

Det mest krevende med moderne spill er grafikken,og bruker du opengl så tar grafikkortet seg av det problemet..

 

Eller Jake2.

 

noen javaspill som bruker opengl:

 

Tribal Trouble

 

Eller

Extorris

 

Eller

Vermin Exterminator

 

Eller

Alien Flux

 

Eller

Sharship2d

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...