!81 modify HeapObjectSize to CommittedSize

Merge pull request !81 from linxiang8/master
This commit is contained in:
openharmony_ci 2021-09-22 03:48:37 +00:00 committed by Gitee
commit be163747fd
3 changed files with 25 additions and 17 deletions

View File

@ -152,10 +152,7 @@ void Heap::CollectGarbage(TriggerGCType gcType)
SetNewSpaceMaximumCapacity(SEMI_SPACE_SIZE_CAPACITY);
ResetAppStartup();
} else {
if (CheckAndTriggerCompressGC()) {
compressCollector_->RunPhases();
RecomputeLimits();
} else {
if (!CheckAndTriggerCompressGC()) {
semiSpaceCollector_->RunPhases();
}
}
@ -233,7 +230,7 @@ void Heap::RecomputeLimits()
bool Heap::CheckAndTriggerOldGC()
{
if (oldSpace_->GetHeapObjectSize() <= oldSpaceAllocLimit_) {
if (oldSpace_->GetCommittedSize() <= oldSpaceAllocLimit_) {
return false;
}
CollectGarbage(TriggerGCType::OLD_GC);
@ -242,7 +239,7 @@ bool Heap::CheckAndTriggerOldGC()
bool Heap::CheckAndTriggerCompressGC()
{
if (oldSpace_->GetHeapObjectSize() <= oldSpaceAllocLimit_) {
if (oldSpace_->GetCommittedSize() <= oldSpaceAllocLimit_) {
return false;
}
CollectGarbage(TriggerGCType::COMPRESS_FULL_GC);
@ -251,7 +248,7 @@ bool Heap::CheckAndTriggerCompressGC()
bool Heap::CheckAndTriggerNonMovableGC()
{
if (nonMovableSpace_->GetHeapObjectSize() <= DEFAULT_NON_MOVABLE_SPACE_LIMIT) {
if (nonMovableSpace_->GetCommittedSize() <= DEFAULT_NON_MOVABLE_SPACE_LIMIT) {
return false;
}
CollectGarbage(TriggerGCType::NON_MOVE_GC);

View File

@ -24,7 +24,7 @@
#include "ecmascript/mem/tlab_allocator.h"
namespace panda::ecmascript {
static constexpr size_t SEMIGC_YOUNG_BUFFER_SIZE = 32 * 1024;
static constexpr size_t YOUNG_BUFFER_SIZE = 32 * 1024;
static constexpr size_t OLD_BUFFER_SIZE = 255 * 1024;
TlabAllocator::TlabAllocator(Heap *heap, TriggerGCType gcType)
@ -35,11 +35,15 @@ TlabAllocator::TlabAllocator(Heap *heap, TriggerGCType gcType)
TlabAllocator::~TlabAllocator()
{
FreeObject::FillFreeObject(heap_->GetEcmaVM(), youngTop_, youngEnd_ - youngTop_);
if (gcType_ == TriggerGCType::SEMI_GC) {
heap_->GetSemiSpaceCollector()->oldSpaceAllocator_.Free(oldTop_, oldEnd_);
} else if (gcType_ == TriggerGCType::COMPRESS_FULL_GC) {
heap_->GetCompressCollector()->oldSpaceAllocator_.Free(oldTop_, oldEnd_);
if (youngTop_ != 0 && youngTop_ != youngEnd_) {
FreeObject::FillFreeObject(heap_->GetEcmaVM(), youngTop_, youngEnd_ - youngTop_);
}
if (oldTop_ != 0 && oldTop_ != oldEnd_) {
if (gcType_ == TriggerGCType::SEMI_GC) {
heap_->GetSemiSpaceCollector()->oldSpaceAllocator_.Free(oldTop_, oldEnd_);
} else if (gcType_ == TriggerGCType::COMPRESS_FULL_GC) {
heap_->GetCompressCollector()->oldSpaceAllocator_.Free(oldTop_, oldEnd_);
}
}
}
@ -114,7 +118,7 @@ bool TlabAllocator::ExpandYoung()
{
uintptr_t buffer = 0;
if (gcType_ == TriggerGCType::SEMI_GC) {
buffer = heap_->GetSemiSpaceCollector()->AllocateYoung(SEMIGC_YOUNG_BUFFER_SIZE);
buffer = heap_->GetSemiSpaceCollector()->AllocateYoung(YOUNG_BUFFER_SIZE);
} else {
UNREACHABLE();
}
@ -124,7 +128,7 @@ bool TlabAllocator::ExpandYoung()
}
youngBegin_ = buffer;
youngTop_ = youngBegin_;
youngEnd_ = youngBegin_ + SEMIGC_YOUNG_BUFFER_SIZE;
youngEnd_ = youngBegin_ + YOUNG_BUFFER_SIZE;
return true;
}
@ -132,7 +136,7 @@ bool TlabAllocator::ExpandOld()
{
uintptr_t buffer = 0;
if (gcType_ == TriggerGCType::SEMI_GC) {
buffer = heap_->GetSemiSpaceCollector()->AllocateOld(OLD_BUFFER_SIZE);
buffer = heap_->GetSemiSpaceCollector()->AllocateOld(YOUNG_BUFFER_SIZE);
} else if (gcType_ == TriggerGCType::COMPRESS_FULL_GC) {
buffer = heap_->GetCompressCollector()->AllocateOld(OLD_BUFFER_SIZE);
} else {
@ -144,7 +148,13 @@ bool TlabAllocator::ExpandOld()
}
oldBegin_ = buffer;
oldTop_ = oldBegin_;
oldEnd_ = oldBegin_ + OLD_BUFFER_SIZE;
if (gcType_ == TriggerGCType::SEMI_GC) {
oldEnd_ = oldBegin_ + YOUNG_BUFFER_SIZE;
} else if (gcType_ == TriggerGCType::COMPRESS_FULL_GC) {
oldEnd_ = oldBegin_ + OLD_BUFFER_SIZE;
} else {
UNREACHABLE();
}
return true;
}
} // namespace panda::ecmascript

View File

@ -290,6 +290,7 @@ JSHandle<JSObject> ObjectFactory::NewJSObject(const JSHandle<JSHClass> &jshclass
NewObjectHook();
JSHandle<JSObject> obj(thread_, JSObject::Cast(NewDynObject(jshclass, JSHClass::DEFAULT_CAPACITY_OF_IN_OBJECTS)));
JSHandle<TaggedArray> emptyArray = EmptyArray();
Barriers::SetDynPrimitive<JSTaggedType>(*obj, ECMAObject::HASH_OFFSET, JSTaggedValue(0).GetRawData());
obj->SetElements(thread_, emptyArray, SKIP_BARRIER);
obj->SetProperties(thread_, emptyArray, SKIP_BARRIER);
return obj;