1 package org.kuali.common.jute.runtime;
2
3 import static org.kuali.common.jute.base.Precondition.checkMin;
4 import static org.kuali.common.jute.reflect.Reflection.checkNoNulls;
5
6 import java.lang.management.ClassLoadingMXBean;
7 import java.lang.management.ManagementFactory;
8
9 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
10
11 @JsonDeserialize(builder = ClassLoading.Builder.class)
12 public final class ClassLoading {
13
14 private final int current;
15 private final long total;
16 private final long unloaded;
17
18 private ClassLoading(Builder builder) {
19 this.current = builder.current;
20 this.total = builder.total;
21 this.unloaded = builder.unloaded;
22 }
23
24 public static ClassLoading build() {
25 ClassLoadingMXBean bean = ManagementFactory.getClassLoadingMXBean();
26 Builder builder = builder();
27 builder.withCurrent(bean.getLoadedClassCount());
28 builder.withTotal(bean.getTotalLoadedClassCount());
29 builder.withUnloaded(bean.getUnloadedClassCount());
30 return builder.build();
31 }
32
33 public static Builder builder() {
34 return new Builder();
35 }
36
37 public static class Builder implements org.apache.commons.lang3.builder.Builder<ClassLoading> {
38
39 private int current;
40 private long total;
41 private long unloaded;
42
43 public Builder withCurrent(int current) {
44 this.current = current;
45 return this;
46 }
47
48 public Builder withTotal(long total) {
49 this.total = total;
50 return this;
51 }
52
53 public Builder withUnloaded(long unloaded) {
54 this.unloaded = unloaded;
55 return this;
56 }
57
58 @Override
59 public ClassLoading build() {
60 return validate(new ClassLoading(this));
61 }
62
63 private static ClassLoading validate(ClassLoading instance) {
64 checkNoNulls(instance);
65 checkMin(instance.current, 0, "current");
66 checkMin(instance.total, 0, "total");
67 checkMin(instance.unloaded, 0, "unloaded");
68 return instance;
69 }
70 }
71
72 public int getCurrent() {
73 return current;
74 }
75
76 public long getTotal() {
77 return total;
78 }
79
80 public long getUnloaded() {
81 return unloaded;
82 }
83
84 }