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
Author: Borneq
Date: Mon, 26 Aug 2013 03:07
Date: Mon, 26 Aug 2013 03:07
12 lines
1658 bytes
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
Author: Arivald
Date: Mon, 26 Aug 2013 04:21
Date: Mon, 26 Aug 2013 04:21
38 lines
2726 bytes
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
Author: Borneq
Date: Mon, 26 Aug 2013 05:12
Date: Mon, 26 Aug 2013 05:12
29 lines
2170 bytes
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
Author: Borneq
Date: Mon, 26 Aug 2013 05:50
Date: Mon, 26 Aug 2013 05:50
9 lines
1464 bytes
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
Author: Arivald
Date: Mon, 26 Aug 2013 06:14
Date: Mon, 26 Aug 2013 06:14
55 lines
2937 bytes
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
Author: Borneq
Date: Mon, 26 Aug 2013 08:31
Date: Mon, 26 Aug 2013 08:31
13 lines
1469 bytes
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
Author: Arivald
Date: Mon, 26 Aug 2013 09:50
Date: Mon, 26 Aug 2013 09:50
30 lines
2078 bytes
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