W celu przyspieszenia zarówno startu jak i działania serwera aplikacji JBoss można trochę zmodyfikować działanie JVM dodając parametry włączające dodatkowe optymalizacje.

Dwa podstawowe parametry to oczywiście zarządzanie pamięcią:

  • -Xms1024m
    Ustawienie początkowego rozmiaru sterty dla JVM (zalecana ta sama wartość co przy -Xmx).
  • -Xmx1024m
    Ustawienie maksymalnego rozmiaru sterty dla JVM.
  • -XX:MaxPermSize=256
    Ustawienie rozmiaru dla przestrzeni z definicjami klas, istotne w przypadku wystąpienie wyjątku OutOfMemoryError: PermGen space.
  • -XX:+UseLargePages
    Rezerwacja dużych strona pamięci, większych niż standardowe 4kB. Może wpływać negatywnie na wydajność innych aplikacji. Uboczną właściwością użycia dużych stron pamięci w Linuksie jest brak ich możliwości zapisania w pamięci swap (co niekoniecznie musi oznaczać coś złego). Aby używać tego parametru, wcześniej należy skonfigurować odpowiednio system operacyjny, dokumentacja znajduje się pod tym dokumencie: Java Support for Large Memory Pages.
  • -XX:+AggressiveOpts
    Włączenie dodatkowych optymalizacji JVM, które mają zostać włączone dopiero w przyszłych wersji Javy.
  • -XX:+DoEscapeAnalysis
    Po włączeniu tej opcji JVM będzie starał się sprawdzić, czy dany obiekt występuje tylko i wyłączenie w lokalnym zasięgu działania metody. Jeżeli tak, to będzie próbował alokować go bezpośrednio w na stosie bądź też w rejestrach. Dokładny opis można znaleźć w artykułach:

Przykładowa zawartość pliku run.conf:

1
2
3
4
5
6
if [ "x$JAVA_OPTS" = "x" ]; then
 JAVA_OPTS="-Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
fi

# optymalizacja
JAVA_OPTS="${JAVA_OPTS} -XX:+UseLargePages -XX:+AggressiveOpts -XX:+DoEscapeAnalysis"