Package com.mebigfatguy.fbcontrib.detect
Class PossibleMemoryBloat
java.lang.Object
edu.umd.cs.findbugs.visitclass.BetterVisitor
edu.umd.cs.findbugs.visitclass.PreorderVisitor
edu.umd.cs.findbugs.visitclass.AnnotationVisitor
edu.umd.cs.findbugs.visitclass.DismantleBytecode
edu.umd.cs.findbugs.BytecodeScanningDetector
com.mebigfatguy.fbcontrib.detect.PossibleMemoryBloat
- All Implemented Interfaces:
edu.umd.cs.findbugs.Detector,edu.umd.cs.findbugs.Priorities,org.apache.bcel.classfile.Visitor
@CustomUserValue
public class PossibleMemoryBloat
extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for classes that maintain collections or StringBuffer/StringBuilders in
static member variables, and that do not appear to provide a way to clear or
remove items from these members. Such class fields are likely causes of
memory bloat.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Map<edu.umd.cs.findbugs.ba.XField, edu.umd.cs.findbugs.FieldAnnotation> private Map<edu.umd.cs.findbugs.ba.XField, edu.umd.cs.findbugs.FieldAnnotation> private final edu.umd.cs.findbugs.BugReporterprivate booleanprivate Booleanprivate static final FQMethodprivate static final FQMethodprivate Stringprivate edu.umd.cs.findbugs.OpcodeStackprivate Set<edu.umd.cs.findbugs.FieldAnnotation> Fields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINTFields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY -
Constructor Summary
ConstructorsConstructorDescriptionPossibleMemoryBloat(edu.umd.cs.findbugs.BugReporter bugReporter) constructs a PMB detector given the reporter to report bugs on -
Method Summary
Modifier and TypeMethodDescriptionprotected voidcheckMethodAsDecreasingOrIncreasing(edu.umd.cs.findbugs.ba.XField field) private voidparseFields(edu.umd.cs.findbugs.ba.ClassContext classContext) protected voidprivate voidprivate voidvoidsawOpcode(int seen) implements the visitor to look for methods that empty a bloatable field if found, remove these fields from the current listprivate booleanvoidvisitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext) collects static fields that are likely bloatable objects and if found allows the visitor to proceed, at the end report all leftover fieldsvoidvisitCode(org.apache.bcel.classfile.Code obj) implements the visitor to reset the opcode stackvoidvisitMethod(org.apache.bcel.classfile.Method obj) implements the visitor to collect the method nameMethods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, report, shouldVisitCodeMethods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
afterOpcode, areOppositeBranches, atCatchBlock, beforeOpcode, getBranchFallThrough, getBranchOffset, getBranchTarget, getClassConstantOperand, getClassDescriptorOperand, getCodeByte, getConstantRefOperand, getDefaultSwitchOffset, getDottedClassConstantOperand, getFieldDescriptorOperand, getIntConstant, getLongConstant, getMaxPC, getMethodDescriptorOperand, getNameConstantOperand, getNextCodeByte, getNextOpcode, getNextPC, getOpcode, getPC, getPrevOpcode, getRefConstantOperand, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString, visitMethods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotationMethods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor
amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingCaughtExceptionTypes, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotationEntry, visitStackMap, visitStackMapEntryMethods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor
clone, report, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitSignature, visitSourceFile, visitSynthetic, visitUnknownMethods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
Field Details
-
bloatableSigs
-
nonBloatableSigs
-
decreasingMethods
-
increasingMethods
-
mapSubsets
-
javaxJaxbNewInstance
-
jakartaJaxbNewInstance
-
specialAnnotations
-
bugReporter
private final edu.umd.cs.findbugs.BugReporter bugReporter -
bloatableCandidates
-
bloatableFields
-
stack
private edu.umd.cs.findbugs.OpcodeStack stack -
methodName
-
threadLocalNonStaticFields
-
userValues
-
jaxbContextRegs
-
isPrivateMethod
private boolean isPrivateMethod -
isSpecialAnnotationMethod
-
-
Constructor Details
-
PossibleMemoryBloat
public PossibleMemoryBloat(edu.umd.cs.findbugs.BugReporter bugReporter) constructs a PMB detector given the reporter to report bugs on- Parameters:
bugReporter- the sync of bug reports
-
-
Method Details
-
visitClassContext
public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext) collects static fields that are likely bloatable objects and if found allows the visitor to proceed, at the end report all leftover fields- Specified by:
visitClassContextin interfaceedu.umd.cs.findbugs.Detector- Overrides:
visitClassContextin classedu.umd.cs.findbugs.BytecodeScanningDetector- Parameters:
classContext- the class context object of the currently parsed java class
-
reportThreadLocalBugs
private void reportThreadLocalBugs() -
reportMemoryBloatBugs
private void reportMemoryBloatBugs() -
parseFields
private void parseFields(edu.umd.cs.findbugs.ba.ClassContext classContext) -
visitMethod
public void visitMethod(org.apache.bcel.classfile.Method obj) implements the visitor to collect the method name- Specified by:
visitMethodin interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitMethodin classedu.umd.cs.findbugs.visitclass.BetterVisitor- Parameters:
obj- the context object of the currently parsed method
-
visitCode
public void visitCode(org.apache.bcel.classfile.Code obj) implements the visitor to reset the opcode stack- Specified by:
visitCodein interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitCodein classedu.umd.cs.findbugs.visitclass.PreorderVisitor- Parameters:
obj- the context object of the currently parsed code block
-
sawOpcode
public void sawOpcode(int seen) implements the visitor to look for methods that empty a bloatable field if found, remove these fields from the current list- Overrides:
sawOpcodein classedu.umd.cs.findbugs.visitclass.DismantleBytecode- Parameters:
seen- the opcode of the currently parsed instruction
-
removeFieldsThatGetReturned
protected void removeFieldsThatGetReturned() -
checkMethodAsDecreasingOrIncreasing
protected void checkMethodAsDecreasingOrIncreasing(edu.umd.cs.findbugs.ba.XField field) -
specialAnnotationMethod
private boolean specialAnnotationMethod()
-