Scenario
- Load millions of
TransformGroup objects into specific Locales in two-level hierarchy.
- Locale
- TransformGroupRetained X
- GroupRetained
- TransformGroupRetained A... (millions of object in this level)
- TransformGroupRetained B... (millions of object in this level)
- Call
VirtualUniverse.removeAllLocales. We will find the $O(N^2)$ time during release resource.
Reason
TransformGroupRetained.removeNodeData will call parent TransformGroupRetained X childTransformLinks.remove step by step.
Possible Solution
Predict the live state from parent class NodeRetained.
|
void clearLive(SetLiveState s) { |
|
void clearLive(SetLiveState s) { |
// in TransformGroupRetained.
@Override
void clearLive(SetLiveState s) {
Targets[] savedTransformTargets = null;
savedTransformTargets = s.transformTargets;
// no need to gather targets from tg in clear live
s.transformTargets = null;
if (refCount - s.refCount <= 0) { // predict live to prevent children update.
childTransformLinks.clear();
}
super.clearLive(s);
...
Scenario
TransformGroupobjects into specificLocalesin two-level hierarchy.VirtualUniverse.removeAllLocales. We will find theReason
java3d-core/src/javax/media/j3d/TransformGroupRetained.java
Line 664 in baff3df
TransformGroupRetained.removeNodeDatawill call parentTransformGroupRetained XchildTransformLinks.removestep by step.Possible Solution
Predict the live state from parent class
NodeRetained.java3d-core/src/javax/media/j3d/NodeRetained.java
Line 720 in baff3df
java3d-core/src/javax/media/j3d/TransformGroupRetained.java
Line 745 in baff3df