avevo usato hashMap prima e mi dava questo problema, ho pensato di provare linkedMap ma il problema non si risolve quindi posso ritornate ad hashmap,

-la map non so quanti elementi deve contenere, prende una stringa controlla che ci sia una key uguale nella map, se non esiste la inserisce e istanzia un oggetto che per ogni elemento con la stessa stringa è sempre uguale, quindi a me interessa tenere traccia nella map solo di un unico elemento distinto.

- no non uso il multi-thread altrimenti dovrei usare una struttura thread-safe

quello che non capisco è come mai in questa classe che al massimo la map puo contenere 200 elementi dopo un po me li svuota,

mentre in un altra classe che gli metto 2milioni di oggetti funzioni beneo almeno stampando il size vedo che non viene svuotata all'improvviso.


quello che ho incollato era un codice che stavo provando per capire il problema, ti posto l'intera classe magari vedi qualcosa che io non riesco a vedere.


codice:
package web.jsoup;




import robots.RobotClient;


import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;


/**
 * Controlla se una url è visitabile
 * 1) controlla se è da visitare
 * 2) controlla se è visitata
 * 3) controlla le regole del robots
 */
public class Visitable {










	private LinkedHashMap<String, RobotClient> rb = new LinkedHashMap<String, RobotClient>();
    //private Map<String, RobotClient> rb = new HashMap();




    /**
     *
     * @param url
     * @return
     */
    public boolean isVisitable(String url){


        url = url.trim();








        if(isUrlToVisited(url)){
            return false;
        }


        else if(isUrlVisited(url)){
            return false;


        }
        else{






            RobotClient robots = getIstanceRobots(url);


            
            


            return robots.isUrlAllowed(url);
        }








    }


    private boolean isUrlToVisited(String url){


        return UrlToVisit.getIstance().containsKey(url);


    }


    private boolean isUrlVisited(String url){


        return UrlVisit.getIstance().isVisited(url);


    }




    /**
     * Inserisce le istanza in una map cosi da non dover
     * istanziare per ogni url
     * @param url
     * @return
     */
    private RobotClient getIstanceRobots(String url){


        URL ur = null;


        try {


            ur = new URL(url);


        } catch (MalformedURLException e) {
            e.printStackTrace();
        }






        String host = ur.getHost();
        String protocol = ur.getProtocol();


        String baseUrl = protocol+"://"+host;
       
        /**
         * Se la url si trova nel set ritorna l'istanza del robot
         * altrimeti la inserisce nella map e ritorna istanza
         */


        
        if(rb.containsKey(baseUrl)){   	
        	
            return rb.get(baseUrl);
        }
        else {
        	
        	
            //istanza di robots che contiene le regole
            rb.put(baseUrl, new RobotClient(Parameter.USER_AGENT, baseUrl));         


            return rb.get(baseUrl);




        }


    }






}