Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867

    [java] Esaurimento heap e garbage collector

    Innanzitutto buongiorno a tutti, in quanto di solito bazzico nel forum di php, mentre qui è la prima volta che posto.
    Avrei una domanda da porvi su un argomento che ho visto trattare più volte ma che mi lascia ancora alcuni dubbi: la garbage collection.

    Ho fatto una specie di spider personalizzato per andare a leggere via http le pagine di alcuni siti dell'azienda in cui lavoro in maniera da estrarre alcuni dati mirati. Il problema è che dopo aver letto oltre 10000 pagine l'heap si esaurisce.

    Ora poichè non posso scendere nei particolari del codice vorrei capire almeno teoricamente se l'esaurimento dell'heap è per forza causato da un errore tipo un ciclo infinito o una ricorsione senza controllo, oppure se in alcuni casi il garbage collector non fa in tempo a liberare memoria poichè vengono creati molti oggetti in un lasso di tempo breve.

    La mia domanda nasce dal fatto che mi sembra di non abusare di risorse, in quanto riciclo tutte le variabili, inserendo al loro interno nuovi riferimenti ad oggetti e quindi i vecchi dovrebbero poter essere spazzati via dal collector, e soprattutto dal fatto che se questo non accadesse mi sembra strano che la memoria non si esaurisca prima di aver letto 10000 o 11000 pagine.

    Se qualcuno avesse suggerimenti, link o teorie valide, sarebbe quantomeno un discorso interessante, anche se non risolve il mio problema specifico.

    Grazie a tutti.


    No pvt per sollecitare risposte, grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    Buongiorno a tutti,
    usando le utility jconsole e jmap e jhat sono riuscito a monitorare la mia applicazione ed ho scoperto che in effetti rimangono allocati moltissimi oggetti di tipo com.mysql.jdbc.StatementImpl che ovviamente riguardano la connessione al db.
    Purtroppo sono comunque in difficoltà a capire come risolvere il problema, io in pratica houna connessione unica che tengo aperta per tutta l'esecuzione del programma e su questa lancio le tutte le query che mi occorrono.
    Per connettermi a mysql e per lanciare le query ho preso spunto da qua http://forum.html.it/forum/showthrea...hreadid=801696 ... ora qualcuno sa dirmi cosa posso fare per evitare che gli statement rimangano in esecuzione, visto che io non riesco a venirne fuori ?? Spero di non dover aprire e chiudere la connessione al db per ogni query che voglio lanciare....

    Grazieeeeeeeeee a chiunque mi dia anche solo una pacca sulla spalla.

    No pvt per sollecitare risposte, grazie.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    Ok tutto risolto, sappiate che con quel metodo se fallisce ad esempio una query di aggiornamento perche' aggiorna zero righe, lo Statement rimane allocato e quindi in programmi grossi come il mio, alla lunga lo heap si esaurisce.

    Saluto tutti quelli che mi conoscono.

    Chiedo scusa per il mio monologo pubblico.

    No pvt per sollecitare risposte, grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.