🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
7 messages
7 total messages Started by Borneq Mon, 26 Aug 2013 03:07
Eclipse nie zwalnia pamięci po aplikacji
#153837
Author: Borneq
Date: Mon, 26 Aug 2013 03:07
12 lines
1658 bytes
Napisałem mały program. Plik jar ma poniżej 7 kilo. To jest duża zaleta w 
porównaniu z takim Pascalem czy C, gdzie nawet proste programy okienkowe 
mają w sobie całą biblitekę.
Gdy uruchomiłem java -jar, wtedy miałem w pamięci niestety ponad 20 mega.
Co gorsza, gdy uruchamiam z Eclipse, to za każdym uruchomieniu i wychodzeniu 
z aplikacji przybywa mi 20 mega javaw.exe.
Może to być spowodowane nie zwlanianiem konsoli. Bo gdy uruchamiam 
java -jar, wtedy pokazuje mi się okienko konsoli (dlaczego, zawsze przy 
java?) Gdy zamykam program, konsola zostaje, jak zrobić,aby się też 
zamykała? Konsolę mogę potem zabić.
Natomiast z Eclipse czy przez jawaw program uruchamia się BEZ konsoli, choć 
chyba konsola jest w pamięci, gdy zamykam program, nie jest on zabijany.
Re: Eclipse nie zwalnia pamięci po aplikacji
#153838
Author: Arivald
Date: Mon, 26 Aug 2013 04:21
38 lines
2726 bytes
W dniu 2013-08-26 05:07, Borneq pisze:
> Napisałem mały program. Plik jar ma poniżej 7 kilo. To jest duża zaleta
> w porównaniu z takim Pascalem czy C, gdzie nawet proste programy
> okienkowe mają w sobie całą biblitekę.
> Gdy uruchomiłem java -jar, wtedy miałem w pamięci niestety ponad 20 mega.
> Co gorsza, gdy uruchamiam z Eclipse, to za każdym uruchomieniu i
> wychodzeniu z aplikacji przybywa mi 20 mega javaw.exe.
> Może to być spowodowane nie zwlanianiem konsoli. Bo gdy uruchamiam java
> -jar, wtedy pokazuje mi się okienko konsoli (dlaczego, zawsze przy
> java?) Gdy zamykam program, konsola zostaje, jak zrobić,aby się też
> zamykała? Konsolę mogę potem zabić.
> Natomiast z Eclipse czy przez jawaw program uruchamia się BEZ konsoli,
> choć chyba konsola jest w pamięci, gdy zamykam program, nie jest on
> zabijany.
>

Po pierwsze użyj "javaw" jak nie używasz konsoli. "java" alokuje 
konsolę, "javaw" nie.

Eclipse to też program Javy, dlatego jego uruchomienie to dla systemu 
uruchomienie JVM czyli javaw.exe.

Po drugie to 20 mega to nie twój program, a JVM. Program ma może 7 kilo, 
ale do dziłania wymaga JVM i bibliotek standardowych Javy. Program w C, 
C++, Pascalu czy Delphi jest większy po skompilowaniu, ale za to jest 
samodzielny.

Po trzecie najprawdopodobniej nie kończysz programu skoro JVM ciągle 
pozostaje w pamięci.

A po czwarte czemu uruchamiasz program ręcznie?
Na toolbarze masz ikonkę do uruchamiania aplikacji (zielone kółko z 
trójkątem jak PLAY). Jak klikniesz dropdown obok, to możesz wejść w "Run 
configurations", i przygotować profil uruchomienia. Zresztą Eclipse samo 
przygotuje profil jak użyjesz któregoś wzorca w "Run as".

-- 
Arivald
Re: Eclipse nie zwalnia pamięci po aplikacji
#153839
Author: Borneq
Date: Mon, 26 Aug 2013 05:12
29 lines
2170 bytes
Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości 
news:kvelab$sh9$1@news.dialog.net.pl...
> A po czwarte czemu uruchamiasz program ręcznie?
> Na toolbarze masz ikonkę do uruchamiania aplikacji (zielone kółko z

Uruchamiam z Eclipse, Eclipse wywołuje javaw.exe. Przekierowuje konsolę do 
Eclipse; java.exe tworzy konsolę mimo że nie używam System.out.println(msg)

>Po trzecie najprawdopodobniej nie kończysz programu skoro JVM ciągle 
>pozostaje w pamięci.

Gdy po zakończeniu nacisnę czerwony przycisk, który jest w oknie konsoli to 
kończy i jest ok, ale nie można zapomnieć a zwykłem kończyć tylko przez 
zamknięcie formy głownej

>Po drugie to 20 mega to nie twój program, a JVM.

Czy można tak zrobić że działa tylko jeden JVM, a  systemie wiele programów 
jawowych?

>Po pierwsze użyj "javaw" jak nie używasz konsoli. "java" alokuje konsolę, 
>"javaw" nie.

Aha, dlatego, zawsze była konsola dla java.exe. Ale javaw mimo braku konsoli 
coś trzyma w pamięci, gdy wołam javaw.exe, nie mogę skończyć programu, 
jedynie mogę skończyć program, gdy wołam go z Eclipse i nacisnę odpowiedni 
przycisk po zamknięciu programu.

Pozdrawiam
Re: Eclipse nie zwalnia pamięci po aplikacji
#153843
Author: Borneq
Date: Mon, 26 Aug 2013 05:50
9 lines
1464 bytes
Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości 
news:kvelab$sh9$1@news.dialog.net.pl...
> Po drugie to 20 mega to nie twój program, a JVM. Program ma może 7 kilo, 
> ale do dziłania wymaga JVM i bibliotek standardowych Javy. Program w C, 
> C++, Pascalu czy Delphi jest większy po skompilowaniu, ale za to jest 
> samodzielny.

Gdyby była w pamięci tylko raz JVM 20 mega i obłsugiwała kilkadziesiąt 
programów to było by świetnie, niestety co program to ładuje się nowa JVM... 
Re: Eclipse nie zwalnia pamięci po aplikacji
#153840
Author: Arivald
Date: Mon, 26 Aug 2013 06:14
55 lines
2937 bytes
W dniu 2013-08-26 07:12, Borneq pisze:
> Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości
> news:kvelab$sh9$1@news.dialog.net.pl...
>> A po czwarte czemu uruchamiasz program ręcznie?
>> Na toolbarze masz ikonkę do uruchamiania aplikacji (zielone kółko z
>
> Uruchamiam z Eclipse, Eclipse wywołuje javaw.exe. Przekierowuje konsolę
> do Eclipse; java.exe tworzy konsolę mimo że nie używam
> System.out.println(msg)
>
>> Po trzecie najprawdopodobniej nie kończysz programu skoro JVM ciągle
>> pozostaje w pamięci.
>
> Gdy po zakończeniu nacisnę czerwony przycisk, który jest w oknie konsoli
> to kończy i jest ok, ale nie można zapomnieć a zwykłem kończyć tylko
> przez zamknięcie formy głownej
>

Dokładnie. W trybie debugowania zobaczysz że w Twoim programie nadal są 
działające wątki, i one trzymają otwarty JVM.

>> Po drugie to 20 mega to nie twój program, a JVM.
>
> Czy można tak zrobić że działa tylko jeden JVM, a  systemie wiele
> programów jawowych?
>

Można, w sensie że ładujesz klasy innych aplikacji do wątkó i wołasz ich 
main. Tylko po co? Oszczędzić te 20 MB ramu?

>> Po pierwsze użyj "javaw" jak nie używasz konsoli. "java" alokuje
>> konsolę, "javaw" nie.
>
> Aha, dlatego, zawsze była konsola dla java.exe. Ale javaw mimo braku
> konsoli coś trzyma w pamięci, gdy wołam javaw.exe, nie mogę skończyć
> programu, jedynie mogę skończyć program, gdy wołam go z Eclipse i
> nacisnę odpowiedni przycisk po zamknięciu programu.
>

Na początek ustaw dla JFrame

setDefaultCloseOperation(EXIT_ON_CLOSE);

lub jeśli masz więcej okien to

setDefaultCloseOperation(DISPOSE_ON_CLOSE);


A jak startujesz osobne wątki, to trzeba poczekać na ich zakończenie, 
lub (gorsze rozwiązanie) ubić.

Ostatecznie możesz użyć System.exit(), ale nie polecam.

-- 
Arivald
Re: Eclipse nie zwalnia pamięci po aplikacji
#153841
Author: Borneq
Date: Mon, 26 Aug 2013 08:31
13 lines
1469 bytes
Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości 
news:kversv$v8h$1@news.dialog.net.pl...
> Na początek ustaw dla JFrame
>
> setDefaultCloseOperation(EXIT_ON_CLOSE);
>
> lub jeśli masz więcej okien to
>
> setDefaultCloseOperation(DISPOSE_ON_CLOSE);

Nie sprawdzałem, ale myślę że właśnie tego mi brakowało.
DISPOSE_ON_CLOSE zwalnie pamięć ale nie wychodzi, a wyjście jest gdy 
wszystkie formy zwolnią pamięć? 
Re: Eclipse nie zwalnia pamięci po aplikacji
#153842
Author: Arivald
Date: Mon, 26 Aug 2013 09:50
30 lines
2078 bytes
W dniu 2013-08-26 10:31, Borneq pisze:
> Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości
> news:kversv$v8h$1@news.dialog.net.pl...
>> Na początek ustaw dla JFrame
>>
>> setDefaultCloseOperation(EXIT_ON_CLOSE);
>>
>> lub jeśli masz więcej okien to
>>
>> setDefaultCloseOperation(DISPOSE_ON_CLOSE);
>
> Nie sprawdzałem, ale myślę że właśnie tego mi brakowało.
> DISPOSE_ON_CLOSE zwalnie pamięć ale nie wychodzi, a wyjście jest gdy
> wszystkie formy zwolnią pamięć?

Nie pamięć, ale wątki.
Lepiej się przyzwyczaj że a Javie pamięć działa zupełnie inaczej.

Prawdopodobnie wątek GUI nie zakończy się dopóki jest choćby jedna 
działająca forma.

BTW forma ma domyślnie HIDE_ON_CLOSE. Dlatego kliknięcie X tylko ją 
ukrywa, a nie kończy.

AFAIK EXIT_ON_CLOSE zakończy aplikację nawet jeśli istnieją inne formy, 
ergo powinno być używane tylko w głównej formie (albo jedno-formowych 
aplikacjach).

-- 
Arivald
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads