# JVM
## Java Virtual Machine (JVM) Attributes
This document defines Java Virtual machine related attributes.
| Attribute | Type | Description | Examples | Stability |
|---|---|---|---|---|
| `jvm.buffer.pool.name` | string | Name of the buffer pool. [1] | `mapped`; `direct` |  |
| `jvm.gc.action` | string | Name of the garbage collector action. [2] | `end of minor GC`; `end of major GC` |  |
| `jvm.gc.cause` | string | Name of the garbage collector cause. [3] | `System.gc()`; `Allocation Failure` |  |
| `jvm.gc.name` | string | Name of the garbage collector. [4] | `G1 Young Generation`; `G1 Old Generation` |  |
| `jvm.memory.pool.name` | string | Name of the memory pool. [5] | `G1 Old Gen`; `G1 Eden space`; `G1 Survivor Space` |  |
| `jvm.memory.type` | string | The type of memory. | `heap`; `non_heap` |  |
| `jvm.thread.daemon` | boolean | Whether the thread is daemon or not. | |  |
| `jvm.thread.state` | string | State of the thread. | `runnable`; `blocked` |  |
**[1] `jvm.buffer.pool.name`:** Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).
**[2] `jvm.gc.action`:** Garbage collector action is generally obtained via [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).
**[3] `jvm.gc.cause`:** Garbage collector cause is generally obtained via [GarbageCollectionNotificationInfo#getGcCause()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcCause()).
**[4] `jvm.gc.name`:** Garbage collector name is generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).
**[5] `jvm.memory.pool.name`:** Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).
---
`jvm.memory.type` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.
| Value | Description | Stability |
|---|---|---|
| `heap` | Heap memory. |  |
| `non_heap` | Non-heap memory |  |
---
`jvm.thread.state` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.
| Value | Description | Stability |
|---|---|---|
| `blocked` | A thread that is blocked waiting for a monitor lock is in this state. |  |
| `new` | A thread that has not yet started is in this state. |  |
| `runnable` | A thread executing in the Java virtual machine is in this state. |  |
| `terminated` | A thread that has exited is in this state. |  |
| `timed_waiting` | A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state. |  |
| `waiting` | A thread that is waiting indefinitely for another thread to perform a particular action is in this state. |  |