Java

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.