Ignore:
Timestamp:
13.03.2010 15:34:25 (2 years ago)
Author:
jttt
Message:

Memory optimizations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r2971 r3129  
    3232import org.openstreetmap.josm.data.osm.RelationMember; 
    3333import org.openstreetmap.josm.data.osm.SimplePrimitiveId; 
     34import org.openstreetmap.josm.data.osm.Storage; 
    3435import org.openstreetmap.josm.data.osm.User; 
    3536import org.openstreetmap.josm.data.osm.Way; 
     
    119120        private long currentExternalId; 
    120121        private String generator; 
     122        private Storage<String> internedStrings = new Storage<String>(); 
     123 
     124        // Memory optimization - see #2312 
     125        private String intern(String s) { 
     126            String result = internedStrings.get(s); 
     127            if (result == null) { 
     128                internedStrings.put(s); 
     129                return s; 
     130            } else 
     131                return result; 
     132        } 
    121133 
    122134        @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 
     135 
    123136            if (qName.equals("osm")) { 
    124137                if (atts == null) { 
     
    258271                String key = atts.getValue("k"); 
    259272                String value = atts.getValue("v"); 
    260                 currentPrimitive.put(key, value); 
     273                currentPrimitive.put(intern(key), intern(value)); 
     274 
    261275            } else { 
    262276                System.out.println(tr("Undefined element ''{0}'' found in input stream. Skipping.", qName)); 
Note: See TracChangeset for help on using the changeset viewer.