Pisałem małą aplikację Java (moja pierwsza!), Która w tej chwili zajmuje tylko kilka rzeczy. Obecnie uruchamia klasę Main, która uruchamia klasę gui (klasa, którą napisałem, która rozszerza JFrame, która zawiera tylko JTextArea), klasę, która ładuje lokalny plik przez BufferedInputStream, który ma około 40kb, oraz klasę, która ładuje wpis z Plik właściwości Java.Użycie pamięci aplikacji Java
Wszystko działa cudownie, jednak obserwowałem menedżera zadań systemu Windows i zauważyłem coś, co wydało mi się dziwne. Kiedy uruchamiam aplikację, użycie pamięci RAM przeskakuje do około 40 MB podczas ładowania lokalnego pliku i pobiera z niego kilka wartości do wyświetlenia w JTextArea, co wydaje mi się normalne z powodu JVM, klas bazowych Java itd. W tym przypadku jednakże, gdy aplikacja zakończy ładowanie pliku, jest ona nieaktywna, ponieważ obecnie nie robię nic innego. Gdy jest ono nieaktywne, tak długo, jak okno jest aktywne, użycie pamięci aplikacji zaczyna się zwiększać o 10-20kb na sekundę. To wydaje mi się dziwne. Jeśli kliknę na inny program, aby uczynić z niego nieaktywne okno, pamięć wciąż rośnie, ale z dużo wolniejszym tempem (około 10kb co 3-5 sekund).
Nie testowałem, żeby zobaczyć, jak daleko się to skończy, ale to wydaje mi się bardzo dziwnym zachowaniem. Czy to normalne zachowanie Java? Sądzę, że jest możliwe, że mój kod może być przeciekającą pamięcią, ale nie jestem pewien jak. Upewniłem się, aby zamknąć BufferedInputStream używam, i nie widzę, co jeszcze spowoduje to.
Przykro mi, jeśli moje wyjaśnienie nie ma sensu, ale byłbym wdzięczny za wszelkie wgląd i/lub wskazówki, które ktoś może mieć.
UPDATE:
Na sugestię, że w zasadzie pozbawiony mojej aplikacji w dół do głównej klasy, która po prostu wywołuje klasę GUI. Klasa gui rozszerza tylko ramkę JFrame i ustawia rozmiar okna, zamknięcie operacji i widoczne właściwości. Dzięki tym zmianom pamięć wciąż rośnie w tempie 10-20 kb, ale w wolniejszym tempie. To, w połączeniu z innymi poradami, które otrzymałem, prowadzi mnie do przekonania, że to tylko Java. Będę z nim dalej grał i dam znać, jeśli dowiem się czegoś ciekawego.
Gratulacje za pierwszą aplikację !!! Może mógłbyś napisać jakiś kod? Bez kodu po prostu zgadujemy. Po prostu monitoruj go, aby zobaczyć, czy naprawdę rośnie, czy po prostu przestaje w pewnym momencie. Opublikuj swoje wyniki. –
@Romain, dzięki! Myślałem o opublikowaniu mojego kodu, ale szczerze mówiąc, bardziej interesowało mnie, czy jest to normalne zachowanie Java (nie sądziłem, ale wszystko jest możliwe!). Zbadam więcej, a następnie opublikuję kod, jeśli nie będę w stanie zrozumieć, dlaczego za kilka dni. Dzięki! –
#masternosaj To normalne, że pamięć zmienia niektóre z nich jako wewnętrznie odświeżane na ekranie, a odśmiecanie jest wykonywane. Nie jest normalne, aby pamięć wciąż rosła. Jeśli jesteś początkującym językiem Java, widziałem ludzi pytających o recenzje kodu sekcji kodu na tej stronie. –