Forskjeller mellom C++ og Java

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

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