public void harvest() {

            for (ListenerHolder listener : listeners.values()) {
                if (listener.getLiveUntil() < admin.calculateTime()) {
                    cancelListener(listener);

                }
            }
        List<ISemiSpaceTuple> beforeEvict = new ArrayList<ISemiSpaceTuple>();

        String[] groups = elements.retrieveGroupNames();
        for ( String group : groups ) {
            int evictSize = beforeEvict.size();
            TupleCollectionById hc = elements.next(group);
            for (ISemiSpaceTuple elem : hc) {
                if (elem.getLiveUntil() < admin.calculateTime()) {
                    beforeEvict.add(elem);
                }
            }
            long afterSize = beforeEvict.size() - evictSize ;
            if ( afterSize > 0 ) {
                List<Long>ids = new ArrayList<Long>();
                for (ISemiSpaceTuple evict : beforeEvict) {
                    ids.add(Long.valueOf( evict.getId()) );
                }
                String moreInfo = "";
                if ( ids.size() < 30 ) {
                    Collections.sort(ids);
                    moreInfo = "Ids: "+ids;
                }
 //               log.logDebug("Testing group "+group+" gave "+afterSize+" element(s) to evict. "+moreInfo);
            }
        }
        for (ISemiSpaceTuple evict : beforeEvict) {
            cancelElement(Long.valueOf(evict.getId()), false, evict.getTag());
        }
    }