Archiwa tagu: Java

Jak zmusić Garbage Collector do działania?

Można próbować, ale nie ma pewności czy rzeczywiście się uruchomi i odśmieci co trzeba:

System.gc();

lub

Runtime.gc();

Jest to jednak niepolecane aby samemu próbować go uruchamiać – lepiej się przyglądnąć dlaczego się uruchamia zbyt rzadko, pokombinować z parametrami JVM dotyczącymi gc, może wybrać inny algorytm działania gc…

Modyfikatory strictfp, native, transient, volatile

strictfp

Wszystkie obliczenia w klasie, interfejsie bądź metodzie oznaczonej tym modyfikatorem są zgodne ze standardem IEEE_754. Nie można go napisać przed konstruktorem klasy. Jeśli klasa lub interfejs mają ten modyfikator to oznacza, że wszystkie metody w nich również go mają i nie możemy przy metodach już go napisać po raz kolejny.

native

Określamy w ten sposób metodę zaimplementowaną zwykle w innym języku programowania (C, C++, Fortran, Asembler, Python, ..) i uruchomioną przez JNI (Java Native Interface). Przykład użycia pod Linuksem z napisaną metodą w języku C jest tutaj.

transient

Modyfikator określający, że dane pole ma nie być utrwalane przy serializacji (zapis klasy wraz z jej stanem na przykład pliku) – na przykład pole-hasło.

volatile

Zmienna oznaczona tym modyfikatorem może być modyfikowana przez kilka wątków jednocześnie. Dobry przykład użycia jest tutaj.

 

Domyślny modyfikator dostępu

Dotyczy:

  • pól
  • metod
  • klas
  • interfejsów

Dostęp domyślny (czyli nie użyliśmy public, private lub protected) oznacza, że dostęp do takich pól, metod, klas bądź interfejsów mają tylko i wyłącznie obiekty z tego samego pakietu (tylko i wyłącznie – pod-pakiety(podkatalogi) nie wchodzą w grę, inne pakiety tym bardziej nie).

Jak zrobić StackOverflowError w Java?

Oczywiście się da i Garbage Collector nas nie uratuje jeśli napiszemy coś takiego:

[code lang=”java”]package it.zielony.examples;

public class OverflowExample {

public static void main(String[] args) {
add(1);
}

public static int add(int a) {
return add(++a);
}
}[/code]

Uruchamając powyższy program dostaniemy:

Exception in thread „main” java.lang.StackOverflowError
at tk.zielinscy.piotr.solutions.OverflowExample.add(OverflowExample.java:10)
at tk.zielinscy.piotr.solutions.OverflowExample.add(OverflowExample.java:10)
at tk.zielinscy.piotr.solutions.OverflowExample.add(OverflowExample.java:10) …