# java.lang.management

***

**1. Getting the current running thread count:**

```java
import java.lang.management.ManagementFactory;

public class ThreadCount {
    public static void main(String[] args) {
        int threadCount = ManagementFactory.getThreadMXBean().getThreadCount();
        System.out.println("Current running thread count: " + threadCount);
    }
}
```

**2. Getting peak thread count:**

```java
import java.lang.management.ManagementFactory;

public class PeakThreadCount {
    public static void main(String[] args) {
        int peakThreadCount = ManagementFactory.getThreadMXBean().getPeakThreadCount();
        System.out.println("Peak thread count: " + peakThreadCount);
    }
}
```

**3. Getting garbage collection statistics:**

```java
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;

public class GarbageCollectionStats {
    public static void main(String[] args) {
        GarbageCollectorMXBean gcBean = ManagementFactory.getGarbageCollectorMXBeans().get(0);
        long collectionCount = gcBean.getCollectionCount();
        long collectionTime = gcBean.getCollectionTime();
        System.out.println("Collection count: " + collectionCount);
        System.out.println("Collection time (ms): " + collectionTime);
    }
}
```

**4. Getting class loading statistics:**

```java
import java.lang.management.ClassLoadingMXBean;
import java.lang.management.ManagementFactory;

public class ClassLoadingStats {
    public static void main(String[] args) {
        ClassLoadingMXBean classLoadingBean = ManagementFactory.getClassLoadingMXBean();
        long loadedClassCount = classLoadingBean.getLoadedClassCount();
        long unloadedClassCount = classLoadingBean.getUnloadedClassCount();
        System.out.println("Loaded class count: " + loadedClassCount);
        System.out.println("Unloaded class count: " + unloadedClassCount);
    }
}
```

**5. Getting memory usage statistics:**

```java
import java.lang.management.MemoryMXBean;
import java.lang.management.ManagementFactory;

public class MemoryUsageStats {
    public static void main(String[] args) {
        MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
        long heapMemoryUsage = memoryBean.getHeapMemoryUsage().getUsed();
        long nonHeapMemoryUsage = memoryBean.getNonHeapMemoryUsage().getUsed();
        System.out.println("Heap memory usage (bytes): " + heapMemoryUsage);
        System.out.println("Non-heap memory usage (bytes): " + nonHeapMemoryUsage);
    }
}
```

**6. Getting thread dump:**

```java
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;

public class ThreadDump {
    public static void main(String[] args) {
        ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
        ThreadInfo[] threadInfos = threadBean.dumpAllThreads(true, true);
        for (ThreadInfo threadInfo : threadInfos) {
            System.out.println("Thread ID: " + threadInfo.getThreadId());
            System.out.println("Thread name: " + threadInfo.getThreadName());
            System.out.println("Thread state: " + threadInfo.getThreadState());
            System.out.println("StackTrace:");
            for (StackTraceElement stackTraceElement : threadInfo.getStackTrace()) {
                System.out.println("\t" + stackTraceElement.toString());
            }
            System.out.println();
        }
    }
}
```

**7. Getting CPU usage:**

```java
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.PlatformManagedObject;
import java.lang.management.ManagementFactory;

public class CpuUsage {
    public static void main(String[] args) {
        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
        double processCpuTime = osBean.getProcessCpuTime();
        long totalCpuTime = osBean.getSystemCpuTime();
        double cpuUsage = (processCpuTime / totalCpuTime) * 100;
        System.out.println("CPU usage: " + cpuUsage + "%");
    }
}
```

**8. Getting process uptime:**

```java
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.ManagementFactory;

public class ProcessUptime {
    public static void main(String[] args) {
        OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
        long uptime = osBean.getUptime();
        System.out.println("Process uptime (ms): " + uptime);
    }
}

```
