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 }