summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/gc/collector/semi_space.cc20
-rw-r--r--runtime/parsed_options.cc6
2 files changed, 19 insertions, 7 deletions
diff --git a/runtime/gc/collector/semi_space.cc b/runtime/gc/collector/semi_space.cc
index 681bfaa..82d6992 100644
--- a/runtime/gc/collector/semi_space.cc
+++ b/runtime/gc/collector/semi_space.cc
@@ -251,13 +251,19 @@ void SemiSpace::MarkingPhase() {
// Note: Freed bytes can be negative if we copy form a compacted space to a free-list backed
// space.
RecordFree(ObjectBytePair(from_objects - to_objects, from_bytes - to_bytes));
- // Clear the from space. Protect it with PROT_READ here and if
- // kProtectFromSpace is true, will protect it with PROT_NONE later
- // in FinishPhase() so the rosalloc verification works (can read the
- // metadata magic number.)
+ // Clear and protect the from space.
from_space_->Clear();
- VLOG(heap) << "Protecting from_space_ with PROT_READ : " << *from_space_;
- from_space_->GetMemMap()->Protect(PROT_READ);
+ if (kProtectFromSpace && !from_space_->IsRosAllocSpace()) {
+ // Protect with PROT_NONE.
+ VLOG(heap) << "Protecting from_space_ : " << *from_space_;
+ from_space_->GetMemMap()->Protect(PROT_NONE);
+ } else {
+ // If RosAllocSpace, we'll leave it as PROT_READ here so the
+ // rosaloc verification can read the metadata magic number and
+ // protect it with PROT_NONE later in FinishPhase().
+ VLOG(heap) << "Protecting from_space_ with PROT_READ : " << *from_space_;
+ from_space_->GetMemMap()->Protect(PROT_READ);
+ }
heap_->PreSweepingGcVerification(this);
if (swap_semi_spaces_) {
heap_->SwapSemiSpaces();
@@ -752,7 +758,7 @@ void SemiSpace::SetFromSpace(space::ContinuousMemMapAllocSpace* from_space) {
void SemiSpace::FinishPhase() {
TimingLogger::ScopedTiming t(__FUNCTION__, GetTimings());
- if (kProtectFromSpace) {
+ if (kProtectFromSpace && from_space_->IsRosAllocSpace()) {
VLOG(heap) << "Protecting from_space_ with PROT_NONE : " << *from_space_;
from_space_->GetMemMap()->Protect(PROT_NONE);
}
diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc
index 4ba3cb9..efc4a71 100644
--- a/runtime/parsed_options.cc
+++ b/runtime/parsed_options.cc
@@ -413,6 +413,12 @@ bool ParsedOptions::Parse(const RuntimeOptions& options, bool ignore_unrecognize
use_homogeneous_space_compaction_for_oom_ = true;
} else if (option == "-XX:DisableHSpaceCompactForOOM") {
use_homogeneous_space_compaction_for_oom_ = false;
+ } else if (StartsWith(option, "-XX:HspaceCompactForOOMMinIntervalMs=")) {
+ unsigned int value;
+ if (!ParseUnsignedInteger(option, '=', &value)) {
+ return false;
+ }
+ min_interval_homogeneous_space_compaction_by_oom_ = MsToNs(value);
} else if (StartsWith(option, "-D")) {
properties_.push_back(option.substr(strlen("-D")));
} else if (StartsWith(option, "-Xjnitrace:")) {