Forskjeller mellom C++ og Java

Fra Wikipedia, den frie encyklopedi

Dette er en sammenlikning mellom programmeringsspråkene Java og C++.

C++ Java
Mer eller mindre bakoverkompatibel med C kildekode. Ikke kildekode-kompatibel med noe annet språk.
Tillater direkte kall til systembiblioteker. Kall til andre biblioteker enn Java-biblioteket er mulig gjennom Java Native Interface.
Avdekker lavnivåfunksjoner i operativsystemet. Dette er en sikkerhetsrisiko. Kjører i en beskyttet virtuell maskin.
Valgfri automatisert grensesjekking (f.eks tabellgrenser). Utfører alltid grensesjekking.
Støtter tall uten fortegn (+-) og aritmetiske metoder for slike tall. Ingen innebygd støtte for tall uten fortegn.
Parametere overføres enten "by value", med en peker eller ved referanser. Parametere overføres alltid "by value"; forvirring kan oppstå ut fra det faktum at alle objekter aksesseres ved bruk av referanser (men uten "*" syntaksen i C). Det er disse referansene som overføres eller returneres "by value".[1]
Eksplisitt minnestyring. "Garbage collection" er mulig ved bruk av eksterne biblioteker. Bare automatisk "garbage collection".
Tillater eksplisitt overskrevne typer. Rigid type-sikkerhet bortsett fra utvidende konverteringer.
C++ standardbiblioteket er noe begrenset, men inkluderer: Språkstøtte; diagnostikk, locales, containers, algoritmer, iteratorer, numerics, IO og C-biblioteket. Plattformspesifikke områder som tråder, nettverk og brukergrensesnitt (GUI) krever ofte tredjeparts-biblioteker. Inneholder et omfattende antall biblioteker. Dette inkluderer containers, locales, algoritmer, iteratorer, GUI programmering, grafikk, flertråding, nettverk og sikkerhet.
Tillater overloading av operatorer. F.eks + og -. Riktig bruk fører til elegant og oversiktlig kode. Funksjonen til en operator kan ikke forandres.
Full og multippel arving. Full arving. Multippel arving er bare mulig fra grensesnitt.

Ytelse[rediger | rediger kilde]

Tidligere versjoner av Java ble i stor grad utkonkurrert av statisk kompilerte språk som C++. Java har derfor hatt et rykte som mindre effektivt. [1] [2][død lenke] Årsaken til den dårlige ytelsen var måten Java-kode ble kompilert på. C++ kompileres til maskinkode. Java ble kompilert til bytekode for eksekvering på en virtuell maskin. For eksempel:

Java/C++ uttrykk C++ kompilert (x86) Java bytekode
vector[i]++; mov edx,[ebp+4h]

mov eax,[ebp+1Ch]
inc dword ptr [edx+eax*4]

aload_1

iload_2
dup2
iaload
iconst_1
iadd
iastore

Selv om bytekode og virtuelle maskiner fortsatt brukes i visse innkapslete systemer på grunn av minnebegrensninger, er ofte argumentet at forbedringer innen "Just-in-time" kompilering (JIT) vil minke ytelsesgapet mellom C++ og Java.

Flere studier som for det meste består av numeriske ytelsestester argumenterer for at Java potensielt kan være raskere enn C++ under visse omstendigheter.[2][3]

  • Pekere gjør optimalisering vanskelig fordi de kan peke til vilkårlige data. Dog tilbyr mange C++ kompilatorer C99 nøkkelordet 'restrict' som takler dette problemet.[4]

Referanser[rediger | rediger kilde]