groups:
  - id: attributes.jvm.memory
    type: attribute_group
    brief: "Describes JVM memory metric attributes."
    attributes:
      - ref: jvm.memory.type
        requirement_level: recommended
      - ref: jvm.memory.pool.name
        requirement_level: recommended
        brief: Name of the memory pool.

  - id: metric.jvm.memory.used
    type: metric
    metric_name: jvm.memory.used
    extends: attributes.jvm.memory
    brief: "Measure of memory used."
    instrument: updowncounter
    unit: "By"
    stability: stable

  - id: metric.jvm.memory.committed
    type: metric
    metric_name: jvm.memory.committed
    extends: attributes.jvm.memory
    brief: "Measure of memory committed."
    instrument: updowncounter
    unit: "By"
    stability: stable

  - id: metric.jvm.memory.limit
    type: metric
    metric_name: jvm.memory.limit
    extends: attributes.jvm.memory
    brief: "Measure of max obtainable memory."
    instrument: updowncounter
    unit: "By"
    stability: stable

  - id: metric.jvm.memory.used_after_last_gc
    type: metric
    metric_name: jvm.memory.used_after_last_gc
    extends: attributes.jvm.memory
    brief: "Measure of memory used, as measured after the most recent garbage collection event on this pool."
    instrument: updowncounter
    unit: "By"
    stability: stable

  - id: metric.jvm.gc.duration
    type: metric
    metric_name: jvm.gc.duration
    brief: "Duration of JVM garbage collection actions."
    instrument: histogram
    unit: "s"
    attributes:
      - ref: jvm.gc.name
        requirement_level: recommended
      - ref: jvm.gc.action
        requirement_level: recommended
    stability: stable

  - id: metric.jvm.thread.count
    type: metric
    metric_name: jvm.thread.count
    brief: "Number of executing platform threads."
    instrument: updowncounter
    unit: "{thread}"
    attributes:
      - ref: jvm.thread.daemon
        requirement_level: recommended
      - ref: jvm.thread.state
        requirement_level: recommended
    stability: stable

  - id: metric.jvm.class.loaded
    type: metric
    metric_name: jvm.class.loaded
    brief: "Number of classes loaded since JVM start."
    instrument: counter
    unit: "{class}"
    stability: stable

  - id: metric.jvm.class.unloaded
    type: metric
    metric_name: jvm.class.unloaded
    brief: "Number of classes unloaded since JVM start."
    instrument: counter
    unit: "{class}"
    stability: stable

  - id: metric.jvm.class.count
    type: metric
    metric_name: jvm.class.count
    brief: "Number of classes currently loaded."
    instrument: updowncounter
    unit: "{class}"
    stability: stable

  - id: metric.jvm.cpu.count
    type: metric
    metric_name: jvm.cpu.count
    brief: "Number of processors available to the Java virtual machine."
    instrument: updowncounter
    unit: "{cpu}"
    stability: stable

  - id: metric.jvm.cpu.time
    type: metric
    metric_name: jvm.cpu.time
    brief: "CPU time used by the process as reported by the JVM."
    instrument: counter
    unit: "s"
    stability: stable

  - id: metric.jvm.cpu.recent_utilization
    type: metric
    metric_name: jvm.cpu.recent_utilization
    brief: "Recent CPU utilization for the process as reported by the JVM."
    note: >
      The value range is [0.0,1.0].
      This utilization is not defined as being for the specific interval since last measurement
      (unlike `system.cpu.utilization`).
      [Reference](https://docs.oracle.com/en/java/javase/17/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getProcessCpuLoad()).
    instrument: gauge
    unit: "1"
    stability: stable
