< prev index next > src/hotspot/share/ci/ciObject.cpp
Print this page
*/
#include "precompiled.hpp"
#include "ci/ciObject.hpp"
#include "ci/ciUtilities.inline.hpp"
+ #include "code/SCCache.hpp"
#include "gc/shared/collectedHeap.inline.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/jniHandles.inline.hpp"
// ciObject
}
// ------------------------------------------------------------------
// ciObject::should_be_constant()
bool ciObject::should_be_constant() {
- if (ScavengeRootsInCode >= 2) return true; // force everybody to be a constant
- if (is_null_object()) return true;
-
+ if (ScavengeRootsInCode >= 2 && !(SCCache::is_on_for_write())) {
+ return true; // force everybody to be a constant
+ }
+ if (is_null_object()) {
+ return true;
+ }
ciEnv* env = CURRENT_ENV;
- // We want Strings and Classes to be embeddable by default since
- // they used to be in the perm world. Not all Strings used to be
- // embeddable but there's no easy way to distinguish the interned
- // from the regulars ones so just treat them all that way.
- if (klass() == env->String_klass() || klass() == env->Class_klass()) {
- return true;
- }
- if (klass()->is_subclass_of(env->MethodHandle_klass()) ||
- klass()->is_subclass_of(env->CallSite_klass())) {
+ // We want Strings and Classes to be embeddable by default since
+ // they used to be in the perm world. Not all Strings used to be
+ // embeddable but there's no easy way to distinguish the interned
+ // from the regulars ones so just treat them all that way.
+ if (klass() == env->String_klass() || klass() == env->Class_klass()) {
+ return true;
+ }
+ if ((klass()->is_subclass_of(env->MethodHandle_klass()) ||
+ klass()->is_subclass_of(env->CallSite_klass())) &&
+ !(SCCache::is_on_for_write())) { // For now disable it when caching startup code.
// We want to treat these aggressively.
return true;
}
return handle() == nullptr;
< prev index next >