code: @Override
  	public void report() {
  		// instead of locking here, we tolerate exceptions
  		// we do this to prevent holding the lock for very long and blocking
  		// operator creation and shutdown
  		try {
  			for (Map.Entry<Gauge<?>, String> entry : gauges.entrySet()) {
  				if (closed) {
  					return;
  				}
  				reportGauge(entry.getValue(), entry.getKey());
  			}
  
  			for (Map.Entry<Counter, String> entry : counters.entrySet()) {
  				if (closed) {
  					return;
  				}
  				reportCounter(entry.getValue(), entry.getKey());
  			}
  
  			for (Map.Entry<Histogram, String> entry : histograms.entrySet()) {
  				reportHistogram(entry.getValue(), entry.getKey());
  			}
  
  			for (Map.Entry<Meter, String> entry : meters.entrySet()) {
  				reportMeter(entry.getValue(), entry.getKey());
  			}
  		}
  		catch (ConcurrentModificationException | NoSuchElementException e) {
  			// ignore - may happen when metrics are concurrently added or removed
  			// report next time
  		}
  	}
docs: ------------------------------------------------------------------------