Wstęp
Nawet luźne piątkowe ankiety mogą nieść ze sobą jakąś wartość edukacyjną. Skoro, “już wiemy”, że Java “potrzebuje więcej niż 32 GB pamięci RAM”, to pojawiają się pytania, jak monitorować zużycie pamięci dla aplikacji napisanych w języku Java? Jak sprawdzić wydajność aplikacji Java pod dużym obciążeniem? Odpowiedzi na, te pytania są w sekcji bonusowej. W dwóch piątkowych ankietach zadałem następujące pytania: Ile pamięci RAM potrzeba do kodowania w języku Java? oraz Ile monitorów potrzeba do kodowania w języku Java?. Wszystkim serdecznie dziękuję za odpowiedzi oraz udział w ankiecie!
Omówienie ankiet
Zarówno ilość pamięci RAM, jak ilość monitorów są bardzo istotnymi elementami, jeżeli chodzi o komfort pracy programisty, programistki. W kwestii ilości pamięci RAM nie chodzi o to, że Java potrzebuje dużo RAMu, ale wszystkie niezbędne narzędzia developerskie połączone razem dają wysokie zapotrzebowanie na pamięć RAM. Kilka dodatkowych monitorów pozwala na korzystanie z wielu narzędzi developerskich jednocześnie.
Ile monitorów potrzeba do kodowania w języku Java?

Wynik ankiety
Widać, że idealnym połączeniem, jeżeli chodzi o ilość monitorów jest jeden monitor z laptopa plus dodatkowy monitor na biurku – 46% osób, tak odpowiedziało. Sam nie pracowałem w takiej konfiguracji. Używałem tylko laptopa (25% głosów) lub dwóch zewnętrznych monitorów i laptopa (21% głosów). Wygląda, na to że 1/2 osób korzysta z laptopa plus dodatkowego monitora. Natomiast, mniej więcej po 1/4 osób korzysta z samego laptopa i/lub laptopa plus dwa dodatkowe monitory.
Do czego więcej niż jeden monitor?
Przy programowaniu, na jednym monitorze można pisać kod źródłowy aplikacji, na drugim sprawdzać logi działającej aplikacji, a na kolejnym przeglądać stronę www aplikacji i/lub szukać informacji w internecie.
Przykłady monitorów – Midjourney AI
Poniżej przykładowy zestaw dwóch monitorów oraz jeden długi monitor z zakrzywionym wyświetlaczem. Mój prompt: /imagine two monitors desktop set oraz /imagine long curved monitor desktop set.


Ile pamięci RAM potrzeba do kodowania w języku Java?

Wynik ankiety
Do pisania kodu w języku Java potrzeba 32 GB pamięci RAM, a nawet jeszcze więcej – 43% osób, tak odpowiedziało. Domyślam się, co osoby głosujące chciały przez to chciały przekazać. Środowisko programistyczne i zestaw narzędzi jako całość wymaga dużej ilości pamięci RAM. Kiedyś próbowałem programować na laptopie z 8 GB pamięci RAM, ale szybko skończyło się, to na wymianie laptopa, na takiego z 32 GB RAMu. Część osób – 20% – programuje z 8GB RAMu, a kolejna grupa osób – 26% – potrzebuje 16 GB pamięci RAM.
Dlaczego minimum 16 GB pamięci RAM?
Tak, jak wspomniałem powyżej, szybko musiałem przesiąść się z 8 GB na 32 GB pamięci RAM. Dlaczego? Do programowania w “czystej Javie”, plus IDE, np.: IntelliJ IDEA wystarczy 8GB RAMu. Sama czysta Java nie wystarczy, programiści, programistki potrzebują jeszcze serwer aplikacyjny, bazę danych + graficzną aplikację do jej obsługi oraz jakiś mechanizm konteneryzacji, np.: Docker.
Sam IntelliJ IDEA, “jak się rozpędzi”, to potrafi wykorzystać 2 GB pamięci RAM. Dlatego programiści szukają “lekkich” serwerów aplikacji i baz danych. Co rozumiem pod pojęciem “lekki”? To, taki, który wykorzystuje mało pamięci RAM, zużywa niewiele zasobów systemu operacyjnego oraz zajmuje mało miejsca na dysku.
Spring Boot korzysta z wbudowanego serwera Tomcat oraz wspiera wbudowaną bazę danych H2Database, to było jednym z elementów, które pozwoliły stać się Spring Framework tak popularnym. Więcej pisałem o tym w moim artykule Używamy „starych” frameworków – Java EE vs. Spring Framework – Dawid kontra Goliat.
Porównanie zapotrzebowania serwerów na pamięć RAM
Serwery aplikacyjne:
- Apache Tomcat – 512 MB RAM.
- WildFly (dawniej JBoss) – od 2-4 GB do 8 GB RAM.
Serwery bazodanowe:
- H2Database – 2 MB RAM.
- Oracle Database – od 4 GB do 16 GB.
Zdaję sobie sprawę, że powyższe porównanie dotyczy różnych klas serwerów do różnych zastosowań, ale chcę pokazać, jak różne może być zapotrzebowanie na zasoby systemowe takie, jak np.: pamięć RAM.
Podsumowanie różnic serwerów – ChatGPT AI
Prompty, które użyłem: “Compare system requirements for servers: Tomcat and Wildfly” oraz “Compare system requirements for Oracle Database and H2Database”.
Serwery aplikacyjne
In summary, Tomcat is a lightweight and flexible servlet container, suitable for a wide range of applications with modest system requirements. WildFly is a more comprehensive Java EE application server designed for enterprise-grade applications, and it requires higher system resources to operate efficiently. Your choice between the two should depend on the specific needs and scale of your application.
Serwery bazodanowe
In summary, Oracle Database is a heavyweight, enterprise-grade database system with high system requirements, designed for large-scale and mission-critical applications. H2 Database, on the other hand, is a lightweight, embeddable database system with modest system requirements, making it suitable for smaller projects, prototyping, and embedded scenarios. The choice between the two should depend on your specific use case and the resources available for your database system.
BONUS: Wydajność aplikacji Java – monitorowanie i testowanie
Pomimo, że Java sama w sobie nie zużywa dużej ilości pamięci RAM, to aplikacje napisane przez nas mogą konsumować jej ogromne ilości z powodu np.: wycieków pamięci. W takim przypadku pierwszą kwestią jest monitorowanie zasobów używanych przez aplikacje Java. Druga kwestia, to w jaki sposób, w bezpiecznych warunkach doprowadzić do takiego obciążenia aplikacji Java, żeby wystąpiły problemy z wydajnością. Z pomocą przychodzą nam poniżej przedstawione narzędzia: JConsole oraz JMeter.
Monitorowanie zasobów oraz wydajności aplikacji Java – JConsole
JConsole stanowi część pakietu Java Development Kit (JDK), a konsolę graficzną można uruchomić za pomocą polecenia „jconsole”. Za jej pomocą można uzyskać informacje o wydajności i zużyciu zasobów w aplikacjach działających na platformie Java.
JConsole
The JConsole graphical user interface is a monitoring tool that complies to the Java Management Extensions (JMX) specification. JConsole uses the extensive instrumentation of the Java Virtual Machine (Java VM) to provide information about the performance and resource consumption of applications running on the Java platform. Źródło: https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

Zakładka Overview wyświetla graficzne informacje monitorujące dotyczące użycia procesora, użycia pamięci, liczby wątków i klas załadowanych do maszyny wirtualnej Java, a wszystko to na jednym ekranie.
Testy obciążeniowe i monitorowanie wydajności aplikacji Java – JMeter
JMeter jest używany jako narzędzie do testowania obciążenia do analizowania i pomiaru wydajności różnych usług, ze szczególnym uwzględnieniem aplikacji internetowych.
JMeter
The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions. Źródło: https://jmeter.apache.org/

Za jego pomocą można weryfikować wydajność “czystych klas Java” z wykorzystaniem “Java Request”.
Java Request – JMeter
This sampler lets you control a java class that implements the org.apache.jmeter.protocol.java.sampler.JavaSamplerClient interface. By writing your own implementation of this interface, you can use JMeter to harness multiple threads, input parameter control, and data collection. Źródło: https://jmeter.apache.org/usermanual/component_reference.html#Java_Request
Można, również użyć JMeter do weryfikacji wydajności testów jednostkowych napisanych w JUnit z wykorzystaniem “JUnit Sampler”. Źródło https://jmeter.apache.org/usermanual/junitsampler_tutorial.html
Podsumowanie
Tak, jak napisałem na wstępie, nawet luźne piątkowe ankiety mogą nieść ze sobą jakąś wartość edukacyjną. Omawiając ilość pamięci RAM potrzebną do pisania aplikacji w języku Java dowiedzieliśmy się, że sama Java, tak na prawdę nie zużywa, tak dużo pamięci RAM. To środowisko programistyczne, czyli narzędzia i serwery potrzebują dużo RAMu. Odpowiadając na pytanie o ilość potrzebnych monitorów, poznaliśmy się, że przy programowaniu, na jednym monitorze można pisać kod źródłowy aplikacji, na drugim sprawdzać logi działającej aplikacji, a na kolejnym przeglądać stronę www aplikacji i/lub szukać informacji w internecie. Na koniec pokazałem przydatne narzędzia do monitorowania zasobów oraz wydajności – JConsole – oraz narzędzie do testów obciążeniowych i monitorowania wydajności – JMeter – oba narzędzia dla aplikacji napisanych w języku Java.