View Javadoc
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  }