public abstract class GenericSharednessPolicy extends java.lang.Object implements SharednessPolicy, Attributor
Modifier and Type | Field and Description |
---|---|
protected FieldSpecMatcher |
alwaysBreakOnFields
always break matching fields, no matter if object is already shared or not
|
protected TypeSpecMatcher |
alwaysBreakOnTypes |
protected boolean |
breakOnExposure
do we add CGs for objects that could become shared, e.g.
|
protected int |
lockThreshold |
protected static JPFLogger |
logger |
protected MethodSpecMatcher |
neverBreakInMethods
never break or expose if a matching method is on the stack
|
protected FieldSpecMatcher |
neverBreakOnFields
never break on matching fields
|
protected TypeSpecMatcher |
neverBreakOnTypes |
protected boolean |
skipConstructedFinals |
protected boolean |
skipFinals
do we break on final field access
|
protected boolean |
skipInits
do we break inside of constructors
(note that 'this' references could leak from ctors, but
this is rather unusual)
|
protected boolean |
skipStaticFinals |
protected boolean |
useSyncDetection
options to filter out lock protected field access, which is not
supposed to cause shared CGs
(this has no effect on exposure though)
|
protected VM |
vm |
Modifier | Constructor and Description |
---|---|
protected |
GenericSharednessPolicy(Config config) |
Modifier and Type | Method and Description |
---|---|
boolean |
canHaveSharedArrayCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiArray,
int idx) |
boolean |
canHaveSharedClassCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi) |
protected java.lang.Boolean |
canHaveSharednessCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi) |
boolean |
canHaveSharedObjectCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi)
check to determine if call site, object/class attributes and thread execution state
could cause CGs.
|
protected abstract boolean |
checkOtherRunnables(ThreadInfo ti) |
void |
cleanupThreadTermination(ThreadInfo ti)
give policy a chance to clean up referencing ThreadInfoSets upon
thread termination
|
protected abstract FieldLockInfo |
createFieldLockInfo(ThreadInfo ti,
ElementInfo ei,
FieldInfo fi)
static attribute filters that determine if the check..Access() and check..Exposure() methods should be called.
|
protected ChoiceGenerator<ThreadInfo> |
getRunnableCG(java.lang.String id,
ThreadInfo tiCurrent) |
protected ThreadInfo[] |
getRunnables(ApplicationContext appCtx) |
void |
initializeSharednessPolicy(VM vm,
ApplicationContext appCtx)
this can be used to initializeSharednessPolicy per-application mechanisms such as ClassInfo attribution
|
protected boolean |
isFirstExposure(ElementInfo eiFieldOwner,
ElementInfo eiExposed) |
protected boolean |
isInNeverBreakMethod(ThreadInfo ti) |
protected boolean |
isRelevantArrayAccess(ThreadInfo ti,
Instruction insn,
ElementInfo ei,
int index) |
protected boolean |
isRelevantStaticFieldAccess(ThreadInfo ti,
Instruction insn,
ElementInfo ei,
FieldInfo fi) |
void |
setAttributes(ClassInfo ci) |
protected void |
setFieldAttributes(FieldSpecMatcher neverMatcher,
FieldSpecMatcher alwaysMatcher,
ClassInfo ci) |
protected boolean |
setNextChoiceGenerator(ChoiceGenerator<ThreadInfo> cg) |
protected boolean |
setsExposureCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi,
ElementInfo eiExposed) |
boolean |
setsSharedArrayCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiArray,
int index) |
boolean |
setsSharedClassCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi) |
boolean |
setsSharedClassExposureCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi,
ElementInfo eiExposed) |
boolean |
setsSharedObjectCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi)
<2do> explain why not transitive
these are the public interfaces towards FieldInstructions.
|
boolean |
setsSharedObjectExposureCG(ThreadInfo ti,
Instruction insn,
ElementInfo eiFieldOwner,
FieldInfo fi,
ElementInfo eiExposed) |
protected void |
setTypeAttributes(TypeSpecMatcher neverMatcher,
TypeSpecMatcher alwaysMatcher,
ClassInfo ciLoaded) |
ElementInfo |
updateArraySharedness(ThreadInfo ti,
ElementInfo ei,
int idx) |
ElementInfo |
updateClassSharedness(ThreadInfo ti,
ElementInfo ei,
FieldInfo fi) |
protected ElementInfo |
updateFieldLockInfo(ThreadInfo ti,
ElementInfo ei,
FieldInfo fi)
generic version of FieldLockInfo update, which relies on FieldLockInfo implementation to determine
if ElementInfo needs to be cloned
|
ElementInfo |
updateObjectSharedness(ThreadInfo ti,
ElementInfo ei,
FieldInfo fi) |
protected ElementInfo |
updateSharedness(ThreadInfo ti,
ElementInfo ei,
FieldInfo fi) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
initializeClassSharedness, initializeObjectSharedness
protected static JPFLogger logger
protected TypeSpecMatcher neverBreakOnTypes
protected TypeSpecMatcher alwaysBreakOnTypes
protected MethodSpecMatcher neverBreakInMethods
protected FieldSpecMatcher neverBreakOnFields
protected FieldSpecMatcher alwaysBreakOnFields
protected boolean skipFinals
protected boolean skipConstructedFinals
protected boolean skipStaticFinals
protected boolean skipInits
protected boolean breakOnExposure
protected boolean useSyncDetection
protected int lockThreshold
protected VM vm
protected GenericSharednessPolicy(Config config)
protected void setTypeAttributes(TypeSpecMatcher neverMatcher, TypeSpecMatcher alwaysMatcher, ClassInfo ciLoaded)
protected void setFieldAttributes(FieldSpecMatcher neverMatcher, FieldSpecMatcher alwaysMatcher, ClassInfo ci)
protected boolean isInNeverBreakMethod(ThreadInfo ti)
protected abstract boolean checkOtherRunnables(ThreadInfo ti)
protected java.lang.Boolean canHaveSharednessCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi)
protected abstract FieldLockInfo createFieldLockInfo(ThreadInfo ti, ElementInfo ei, FieldInfo fi)
protected ElementInfo updateFieldLockInfo(ThreadInfo ti, ElementInfo ei, FieldInfo fi)
protected ThreadInfo[] getRunnables(ApplicationContext appCtx)
protected ChoiceGenerator<ThreadInfo> getRunnableCG(java.lang.String id, ThreadInfo tiCurrent)
protected boolean setNextChoiceGenerator(ChoiceGenerator<ThreadInfo> cg)
protected ElementInfo updateSharedness(ThreadInfo ti, ElementInfo ei, FieldInfo fi)
protected boolean setsExposureCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed)
protected boolean isFirstExposure(ElementInfo eiFieldOwner, ElementInfo eiExposed)
public void initializeSharednessPolicy(VM vm, ApplicationContext appCtx)
initializeSharednessPolicy
in interface SharednessPolicy
public void setAttributes(ClassInfo ci)
setAttributes
in interface Attributor
public ElementInfo updateObjectSharedness(ThreadInfo ti, ElementInfo ei, FieldInfo fi)
updateObjectSharedness
in interface SharednessPolicy
public ElementInfo updateClassSharedness(ThreadInfo ti, ElementInfo ei, FieldInfo fi)
updateClassSharedness
in interface SharednessPolicy
public ElementInfo updateArraySharedness(ThreadInfo ti, ElementInfo ei, int idx)
updateArraySharedness
in interface SharednessPolicy
public boolean canHaveSharedObjectCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi)
canHaveSharedObjectCG
in interface SharednessPolicy
public boolean canHaveSharedClassCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi)
canHaveSharedClassCG
in interface SharednessPolicy
public boolean canHaveSharedArrayCG(ThreadInfo ti, Instruction insn, ElementInfo eiArray, int idx)
canHaveSharedArrayCG
in interface SharednessPolicy
public boolean setsSharedObjectCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi)
setsSharedObjectCG
in interface SharednessPolicy
public boolean setsSharedClassCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi)
setsSharedClassCG
in interface SharednessPolicy
public boolean setsSharedArrayCG(ThreadInfo ti, Instruction insn, ElementInfo eiArray, int index)
setsSharedArrayCG
in interface SharednessPolicy
protected boolean isRelevantStaticFieldAccess(ThreadInfo ti, Instruction insn, ElementInfo ei, FieldInfo fi)
protected boolean isRelevantArrayAccess(ThreadInfo ti, Instruction insn, ElementInfo ei, int index)
public boolean setsSharedObjectExposureCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed)
setsSharedObjectExposureCG
in interface SharednessPolicy
public boolean setsSharedClassExposureCG(ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed)
setsSharedClassExposureCG
in interface SharednessPolicy
public void cleanupThreadTermination(ThreadInfo ti)
SharednessPolicy
cleanupThreadTermination
in interface SharednessPolicy