src/share/vm/aot/aotCodeHeap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/share/vm/aot/aotCodeHeap.cpp
src/share/vm/aot/aotCodeHeap.cpp
Print this page
rev 29186 : Review changes 2
*** 20,37 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include "precompiled.hpp"
#include "gc/g1/heapRegion.hpp"
#include "gc/shared/gcLocker.hpp"
#include "jvmci/compilerRuntime.hpp"
#include "jvmci/jvmciRuntime.hpp"
#include "oops/method.hpp"
- #include "aot/aotLoader.hpp"
- #include "aot/aotCodeHeap.hpp"
-
#include "runtime/os.hpp"
#include "runtime/sharedRuntime.hpp"
#include "runtime/vm_operations.hpp"
bool AOTCodeHeap::_narrow_oop_shift_initialized = false;
--- 20,37 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include "precompiled.hpp"
+
+ #include "aot/aotLoader.hpp"
+ #include "aot/aotCodeHeap.hpp"
#include "gc/g1/heapRegion.hpp"
#include "gc/shared/gcLocker.hpp"
#include "jvmci/compilerRuntime.hpp"
#include "jvmci/jvmciRuntime.hpp"
#include "oops/method.hpp"
#include "runtime/os.hpp"
#include "runtime/sharedRuntime.hpp"
#include "runtime/vm_operations.hpp"
bool AOTCodeHeap::_narrow_oop_shift_initialized = false;
*** 78,95 ****
name++;
len -= 2;
}
TempNewSymbol sym = SymbolTable::probe(name, len);
if (sym == NULL) {
! log_debug(aotclassresolve)("Probe failed for AOT class %s", name);
return NULL;
}
Klass* k = SystemDictionary::find_instance_or_array_klass(sym, loader, protection_domain, thread);
assert(!thread->has_pending_exception(), "should not throw");
if (k != NULL) {
! log_info(aotclassresolve)("%s %s (lookup)", caller->method_holder()->external_name(), k->external_name());
}
return k;
}
void AOTCodeHeap::handle_config_error(const char* format, ...) {
--- 78,95 ----
name++;
len -= 2;
}
TempNewSymbol sym = SymbolTable::probe(name, len);
if (sym == NULL) {
! log_debug(aot, class, resolve)("Probe failed for AOT class %s", name);
return NULL;
}
Klass* k = SystemDictionary::find_instance_or_array_klass(sym, loader, protection_domain, thread);
assert(!thread->has_pending_exception(), "should not throw");
if (k != NULL) {
! log_info(aot, class, resolve)("%s %s (lookup)", caller->method_holder()->external_name(), k->external_name());
}
return k;
}
void AOTCodeHeap::handle_config_error(const char* format, ...) {
*** 265,275 ****
tty->print("%7d ", (int) tty->time_stamp().milliseconds());
tty->print_cr("%4d loaded %s aot library", _dso_id, _name);
}
}
! void AOTCodeHeap::publish_aot(instanceKlassHandle kh, methodHandle mh, AOTMethodData* method_data, int code_id) {
// The method may be explicitly excluded by the user.
if (CompilerOracle::should_exclude(mh)) {
return;
}
--- 265,275 ----
tty->print("%7d ", (int) tty->time_stamp().milliseconds());
tty->print_cr("%4d loaded %s aot library", _dso_id, _name);
}
}
! void AOTCodeHeap::publish_aot(const methodHandle& mh, AOTMethodData* method_data, int code_id) {
// The method may be explicitly excluded by the user.
if (CompilerOracle::should_exclude(mh)) {
return;
}
*** 629,639 ****
VMThread::execute(&op);
}
}
}
! bool AOTCodeHeap::load_klass_data(instanceKlassHandle kh, Thread* thread) {
ResourceMark rm;
NOT_PRODUCT( klasses_seen++; )
AOTKlassData* klass_data = find_klass(kh());
--- 629,639 ----
VMThread::execute(&op);
}
}
}
! bool AOTCodeHeap::load_klass_data(const instanceKlassHandle& kh, Thread* thread) {
ResourceMark rm;
NOT_PRODUCT( klasses_seen++; )
AOTKlassData* klass_data = find_klass(kh());
*** 641,669 ****
return false;
}
if (!kh->has_passed_fingerprint_check()) {
NOT_PRODUCT( aot_klasses_fp_miss++; )
! log_trace(aotclassfingerprint)("class %s%s has bad fingerprint in %s tid=" INTPTR_FORMAT,
kh->internal_name(), kh->is_shared() ? " (shared)" : "",
_name, p2i(thread));
sweep_dependent_methods(klass_data);
return false;
}
assert(klass_data->_class_id < _class_count, "invalid class id");
AOTClass* aot_class = &_classes[klass_data->_class_id];
if (aot_class->_classloader != NULL && aot_class->_classloader != kh->class_loader_data()) {
! log_trace(aotclassload)("class %s in %s already loaded for classloader %p vs %p tid=" INTPTR_FORMAT,
kh->internal_name(), _name, aot_class->_classloader, kh->class_loader_data(), p2i(thread));
NOT_PRODUCT( aot_klasses_cl_miss++; )
return false;
}
NOT_PRODUCT( aot_klasses_found++; )
! log_trace(aotclassload)("found %s in %s for classloader %p tid=" INTPTR_FORMAT, kh->internal_name(), _name, kh->class_loader_data(), p2i(thread));
aot_class->_classloader = kh->class_loader_data();
// Set klass's Resolve (second) got cell.
_metaspace_got[klass_data->_got_index] = kh();
--- 641,669 ----
return false;
}
if (!kh->has_passed_fingerprint_check()) {
NOT_PRODUCT( aot_klasses_fp_miss++; )
! log_trace(aot, class, fingerprint)("class %s%s has bad fingerprint in %s tid=" INTPTR_FORMAT,
kh->internal_name(), kh->is_shared() ? " (shared)" : "",
_name, p2i(thread));
sweep_dependent_methods(klass_data);
return false;
}
assert(klass_data->_class_id < _class_count, "invalid class id");
AOTClass* aot_class = &_classes[klass_data->_class_id];
if (aot_class->_classloader != NULL && aot_class->_classloader != kh->class_loader_data()) {
! log_trace(aot, class, load)("class %s in %s already loaded for classloader %p vs %p tid=" INTPTR_FORMAT,
kh->internal_name(), _name, aot_class->_classloader, kh->class_loader_data(), p2i(thread));
NOT_PRODUCT( aot_klasses_cl_miss++; )
return false;
}
NOT_PRODUCT( aot_klasses_found++; )
! log_trace(aot, class, load)("found %s in %s for classloader %p tid=" INTPTR_FORMAT, kh->internal_name(), _name, kh->class_loader_data(), p2i(thread));
aot_class->_classloader = kh->class_loader_data();
// Set klass's Resolve (second) got cell.
_metaspace_got[klass_data->_got_index] = kh();
*** 696,706 ****
Method* m = AOTCodeHeap::find_method(kh, thread, method_name);
methodHandle mh(thread, m);
if (mh->code() != NULL) { // Does it have already compiled code?
continue; // Don't overwrite
}
! publish_aot(kh, mh, method_data, code_id);
}
}
return true;
}
--- 696,706 ----
Method* m = AOTCodeHeap::find_method(kh, thread, method_name);
methodHandle mh(thread, m);
if (mh->code() != NULL) { // Does it have already compiled code?
continue; // Don't overwrite
}
! publish_aot(mh, method_data, code_id);
}
}
return true;
}
*** 831,841 ****
}
return count;
}
#endif
! void AOTCodeHeap::flush_evol_dependents_on(instanceKlassHandle dependee) {
for (int index = 0; index < _method_count; index++) {
if (_code_to_aot[index]._state != in_use) {
continue; // Skip uninitialized entries.
}
AOTCompiledMethod* aot = _code_to_aot[index]._aot;
--- 831,841 ----
}
return count;
}
#endif
! void AOTCodeHeap::flush_evol_dependents_on(const instanceKlassHandle& dependee) {
for (int index = 0; index < _method_count; index++) {
if (_code_to_aot[index]._state != in_use) {
continue; // Skip uninitialized entries.
}
AOTCompiledMethod* aot = _code_to_aot[index]._aot;
src/share/vm/aot/aotCodeHeap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File