zasypianie programu

0

robie aplikacje w swingu typu MDI , no i wszystko jest ok lecz przy dluzszym pozostawieniu komputera z dzialajcym programem , to ta aplikacja robi sie cala szara , wyskakuja bledy ze zgubil drzewo okien itp i nie moze odmalowac . czy moze ktos wie o co tu chodzi i co z tym zrobic

0

problem rodzi się w momencie w któym pozostawiona sobie java virtual machine zaczyna "sprzątać" pamięć.

najlepszym rozwiązaniem jest spowodowanie działania wewętrznego mechanizmu (na przykład timer), który zapobiegnie porządkom :)aplikacja nieużywana przez dłuższy czas jest traktowana przez JVM jako niedziałająca i jej garbage collector jest opróżniany :)

0

Garbage collector to architektura zarzadzania pamiecia. Jak GC moze byc oprozniany? To chyba GC oproznia pamiec, a nie samego siebie.

0

masz rację :) błęda zrobiłem miało być że nie garbage collector jest opróżniany tylko że zaczyna opróżniać pamięć ;)

0

a jak tego timera uzyc ?? czy to moze zwykly watek liczacy cos tam ??

0

może być zwykły wątek liczący cokolwiek. byleby aplikacja była w jakiś sposób aktywna ;)

0

a nie da sie tegow jakis inny sposob wykonac , bo prawde mowiac uruchamianie nowego watku przy aplikacji typu MDI to nie jest najlepsze rozwiazanie , a poza tym mam polaczenie z baza danych otwarte ktore dosyc szybko jest usuwane i nie mam polaczenia musze je odnawiac a to trwa mala chwilke

moze da siepo prostu to sprzatanie usunac ,a w ogóle to mnei ta java coraz czesciej denerwuje wlasnie przez takie bzdury , jak mozna zrobic takiego bubla co mi kasuje rzeczy kiedy chce :/

0

zygfryd -> utrzymywanie otwartego połączenia z bazą danych powoduje tylko przeciążenie serwera db. zamykaj je jak pobierzesz dane. lepiej jest je uaktywnić niż zawiesić serwer.

0

no ja tylko uchwyt trzymam ,a java go wkoncu kasuje

sa dwie filozofie

  1. nalezy obciazyc serwer , aby zmniejszyc obciazenie klienta
  2. odciazyc serwer ,ale to wtedy utrudnia klientowi prace
0

Nie zapominajmy że obciążając serwer i utrzymując połączenie nadal obciążamy klienta a przynajmniej jego łącze. W Javie do tego dochodzi jeszcze zajmowanie pamięci przez strukturę połączenia. O wiele lepszym moim zdaniem rozwiązaniem jest otwieranie połączenia przy potrzebie a nie bez niej. ;)

Nawiązanie połączenia będzie trwało ułamek sekundy (o ile serwer zezwoli na nie) którego klient nie zauważy. A przy utrzymywaniu połączenia aplikacja będzie cały czas zajmować pamięć, którą mogłaby zwolnić tymczasowo (obciążenie klienta) i do tego obciążamy serwer.

Załóżmy hipotetyczną sytuację firmy w której działa aplikacja utrzymująca połączenie z serwerem. Powiedzmy że pracuje w niej ok 200 pracowników. Na przerwę wychodzi w danym momencie (ze względu na papierosa, przejście do innego biura, kawę itd.) ok 20%. 30% w danym momencie nie korzysta aplikacji bo na przykład rozmawia przez telefeon.

Powiedzmy że z ogólnej liczby osób zatrudnionych na aplikacji pracuje w sumie 75% (150) osób. Jeżeli z tego 50% nie korzysta z niej w danej chwili (ale ma ją otwartą i utrzymane połączenie z serwerem) należy założyć że zasoby serwera marnują się bezsensowanie skoro nie muszą. To będzie na administratorach wymuszać wylogowanie użytkowników nieaktywnych.

Natomiast przy nawiązywaniu połączenia każdorazowo zasoby serwera są dzielonje na tylu użytkowników ilu jest aktualnie zalogowanych.

Przy 10 klientach można utrzymać aktywność, ale powyżej tej liczby może stać się bardzo uciążliwa praca na takim rozwiązaniu.

Zrobił się mały off-top i może moderatorzy mogliby to przeciąć i tą część dać do server side a tą o javie zostawić.

0
jmail napisał(a)

Nie zapominajmy że obciążając serwer i utrzymując połączenie nadal obciążamy klienta a przynajmniej jego łącze. W Javie do tego dochodzi jeszcze zajmowanie pamięci przez strukturę połączenia. O wiele lepszym moim zdaniem rozwiązaniem jest otwieranie połączenia przy potrzebie a nie bez niej. ;)

Troche lepsze, ale tak sie tez nie robi.

Nawiązanie połączenia będzie trwało ułamek sekundy (o ile serwer zezwoli na nie) którego klient nie zauważy.

Dosyc duzy ulamek w porownaniu z czasem dobrze zoptymalizowanych zapytan. I zasobochlonny.

A przy utrzymywaniu połączenia aplikacja będzie cały czas zajmować pamięć, którą mogłaby zwolnić tymczasowo (obciążenie klienta) i do tego obciążamy serwer.

Dla PostgreSQLa to jest jakies kilkaset B na polaczenie. Duzo nie zaoszczedzisz. :D

Załóżmy hipotetyczną sytuację firmy w której działa aplikacja utrzymująca połączenie z serwerem. Powiedzmy że pracuje w niej ok 200 pracowników. Na przerwę wychodzi w danym momencie (ze względu na papierosa, przejście do innego biura, kawę itd.) ok 20%. 30% w danym momencie nie korzysta aplikacji bo na przykład rozmawia przez telefeon.

Powiedzmy że z ogólnej liczby osób zatrudnionych na aplikacji pracuje w sumie 75% (150) osób. Jeżeli z tego 50% nie korzysta z niej w danej chwili (ale ma ją otwartą i utrzymane połączenie z serwerem) należy założyć że zasoby serwera marnują się bezsensowanie skoro nie muszą.

Marnuje sie kilkaset KB na serwerze, ktory ma kilka GB...

To będzie na administratorach wymuszać wylogowanie użytkowników nieaktywnych.
Natomiast przy nawiązywaniu połączenia każdorazowo zasoby serwera są dzielonje na tylu użytkowników ilu jest aktualnie zalogowanych.

Przy 10 klientach można utrzymać aktywność, ale powyżej tej liczby może stać się bardzo uciążliwa praca na takim rozwiązaniu.

Zrobił się mały off-top i może moderatorzy mogliby to przeciąć i tą część dać do server side a tą o javie zostawić.

Argumentacja dobra, ale rozwiazanie nietrafione. Otwieranie polaczenia z baza za kazdym razem jest kosztowne, poza tym tez moze doprowadzic do tego, ze na raz bedziesz miec otwartych zbyt duzo polaczen. W profesjonalnych aplikacjach utrzymuje sie pule polaczen o stalym maksymalnym rozmiarze i pozwala sie na ponowne uzycie tego samego polaczenia dla wielu klientow/transakcji. Podobnie robi sie z watkami. Dlatego 200 klientow spokojnie moze pracowac na 10 polaczeniach.

Poza tym co to za klient, co bezposrednio laczy sie z baza?! A gdzie middleware?

Wracajac do tematu. Gwoli sprostowania:
Garbage collector javy nie sprzata obiektow, ktore "nie wykazuja aktywnosci". GC sprzata obiekty niedostepne, ktorych w zaden sposob nie da sie uzyc.

0

no dobra, dobra ladne wypracowania tu walneliscie ,ale jak na razie nie ma zadnej sensownej odpowiedzi na glowne pytanie - moze nie ma odpowiedzi na to pytanie [diabel]

1 użytkowników online, w tym zalogowanych: 0, gości: 1