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 | 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] |
aload_1 iload_2 |
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]- ^ Referanse (engelsk)
- ^ "Performance of Java versus C++ (2004)" Arkivert 13. mai 2008 hos Wayback Machine.
- ^ "Java will be faster than C++ (2001)"
- ^ «Demystifying the Restrict Keyword». Arkivert fra originalen 19. juni 2008. Besøkt 30. mai 2008.