Krytyka plus kontrowersje
Język Java nie zważając na swoich wielu zalet, ma wiele wad do wnętrza tym takie, które wzbudzają liczne kontrowersje:
- Najczęściej wymienianą wadą języka Java jest to, że programy pisane do wnętrza Javie wykonują się wolniej niż programy pisane do wnętrza językach natywnie kompilowanych (np. C++). Zarzut ten odnosi się w szczególności
do starych wersji Javy, jak zaawansowane mechanizmy takie w charakterze
JIT ewentualnie współbieżny odśmiecacz nie poprzedni dostępne. Obecnie zdania są silnie podzielone. Można posługiwać przykłady programów zarówno takich, które w środku Javie będą wykonywały się wolniej niż w środku C++, w charakterze
również takich, które będą wykonywały się szybciej.
- Javie zarzuca się, że niezbyt prawidłowo nadaje się do zastosowań czasu rzeczywistego. Głównym problemem jest pozbawienie
przewidywalności wydajności również nieoczekiwane przestoje powodowane działaniem odśmiecacza. W nowych wersjach Javy ten pozostały
zagadnienie
został radykalnie ograniczony, tymczasem do tej pory do zastosowań czasu rzeczywistego lepiej używać
języki natywnie kompilowane.
- Często Javie zarzucane jest to, że ma mniejszą funkcjonalność niż np. C++, co ogranicza programistę. Jako przypadek
przywołuje się kiedy niekiedy fakt, że by wprowadzić w życie drobny plan wypada
wpisać
dłuższy szyfr
programu. Niektórzy jakkolwiek zwracają uwagę, że ponadto zbiór znaków
C++ nie ma wielu elementów, które jest dozwolone wypatrzyć w środku Javie jako np. klasy anonimowe, garbage collector, układ pakietów, dynamiczne wprowadzanie danych
klas innymi słowy reflection API.
- Java nie jest językiem wiernie
obiektowym, skoro
udostępnia dwójka
rodzaje obiektów - obiekty pierwotne, alokowane explicite na stosie także
obiekty do których odwołujemy się na wskroś referencje. Powoduje to różnego rodzaju komplikacje. Między innymi wymusza konwersję na odpowiadający odmiana referencyjny wobec
pracy z kolekcjami, co prawdopodobnie być wyposażonym o odcieniu ujemnym wpływ na zdolność produkcyjna
do wnętrza specyficznych sytuacjach. Typy generyczne, wprowadzone w środku wersji 5, faktycznie zlikwidowały ten problem. W tej samej wersji wprowadzono funkcję autoboxingu, lub automatycznej konwersji pośrodku
typami pierwotnymi plus ich obiektowymi odpowiednikami, np. int <-> Integer.