JAVA,C sharp
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469jiajia.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
下例是以我现在浅薄
![](/icons/18469de.gif)
![](/icons/18469jiajia.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469hanshu.gif)
![](/icons/18469de.gif)
简单示意:
void Class1::GetReference
![](/icons/18469kh.gif)
{
m_reftoClass2 ->doMark
![](/icons/18469kh.gif)
or
![](/icons/18469return.gif)
}
#
![](/icons/18469if.gif)
#
![](/icons/18469define.gif)
#pragma _disibledevent=>
![](/icons/18469return.gif)
}
![](/icons/18469static.gif)
void GarbageCollection(Collectable *rootObj);
private:
GarbageCollector
![](/icons/18469kh.gif)
{
}
void Mark(Collectable *obj);
void Sweep
![](/icons/18469kh.gif)
MEMPOOL iMemPool;
![](/icons/18469static.gif)
![](/icons/18469kh.gif)
void doMark(void)
{
![](/icons/18469if.gif)
{
iMarkBit = true;
GetReference
![](/icons/18469kh.gif)
GarbageCollector::Add2GC(this);
}
}
virtual void GetReference
![](/icons/18469kh.gif)
protected:
bool iMarkBit;//Mark for GC
};
GarbageCollector *GarbageCollector::iSelf = NULL;
void GarbageCollector::Add2GC(Collectable *obj)
{
(iSelf->iMemPool).push_back(obj);
}
void GarbageCollector::Mark(Collectable *obj)
{
![](/icons/18469if.gif)
obj->doMark
![](/icons/18469kh.gif)
}
void GarbageCollector::Sweep
![](/icons/18469kh.gif)
{
for(MEMPOOL::iterator vIter = iMemPool.begin
![](/icons/18469kh.gif)
![](/icons/18469kh.gif)
{
Collectable *temp = *vIter;
//Here it's the data used by other data
![](/icons/18469if.gif)
{
temp->iMarkBit = false;
vIter
![](/icons/18469jiajia.gif)
}
![](/icons/18469else.gif)
{
//Discard the useless data block and adjust iterator to proper position
vIter = iMemPool.erase(vIter);
//free the memory or push the space
![](/icons/18469int.gif)
delete temp;
}
}
}
void GarbageCollector::GarbageCollection(Collectable *rootObj)
{
![](/icons/18469if.gif)
{
Mark(rootObj);
Sweep
![](/icons/18469kh.gif)
}
}
#end
![](/icons/18469if.gif)
本例其实存在隐患,即有可能stack overflow.
![](/icons/18469yinwei.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469de.gif)
![](/icons/18469yinwei.gif)
![](/icons/18469de.gif)
最新评论