public void addListener(WatermarkListener listener) {
        lock.lock();
        try {
            listeners.add(listener);
            MetricsCreator metricsCreator = getMetricsCreator();
            for (WatermarkEvent.Type type : WatermarkEvent.Type.values()) {
                breakCounters.get(type).put(listener.getName(), metricsCreator.createCounter(
                    "watermark_circuit_breaker_break_count", "The number of times the watermark circuit breaker breaks",
                    new MetricsTag.Keys("listener", "event"),
                    new MetricsTag.Values(listener.getName(), type.name())
                ));
            }
            recoverCounters.put(listener.getName(), metricsCreator.createCounter(
                "watermark_circuit_breaker_recover_count", "The number of times the watermark circuit breaker recovers",
                new MetricsTag.Keys("listener"),
                new MetricsTag.Values(listener.getName())
            ));
        } finally {
            lock.unlock();
        }
    }
Heap memory used, jvm_memory_used_bytes{area="heap"}, Use the combination of all available ids of heap memory.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/watermark/WatermarkWatcher.java