424 // adjust pcs_size so that it is a multiple of both oopSize and
425 // sizeof(PcDesc) (assumes that if sizeof(PcDesc) is not a multiple
426 // of oopSize, then 2*sizeof(PcDesc) is)
427 static int adjust_pcs_size(int pcs_size) {
428 int nsize = round_to(pcs_size, oopSize);
429 if ((nsize % sizeof(PcDesc)) != 0) {
430 nsize = pcs_size + sizeof(PcDesc);
431 }
432 assert((nsize % oopSize) == 0, "correct alignment");
433 return nsize;
434 }
435
436 //-----------------------------------------------------------------------------
437
438
439 void nmethod::add_exception_cache_entry(ExceptionCache* new_entry) {
440 assert(ExceptionCache_lock->owned_by_self(),"Must hold the ExceptionCache_lock");
441 assert(new_entry != NULL,"Must be non null");
442 assert(new_entry->next() == NULL, "Must be null");
443
444 if (exception_cache() != NULL) {
445 new_entry->set_next(exception_cache());
446 }
447 set_exception_cache(new_entry);
448 }
449
450 void nmethod::clean_exception_cache(BoolObjectClosure* is_alive) {
451 ExceptionCache* prev = NULL;
452 ExceptionCache* curr = exception_cache();
453
454 while (curr != NULL) {
455 ExceptionCache* next = curr->next();
456
457 Klass* ex_klass = curr->exception_type();
458 if (ex_klass != NULL && !ex_klass->is_loader_alive(is_alive)) {
459 if (prev == NULL) {
460 set_exception_cache(next);
461 } else {
462 prev->set_next(next);
463 }
464 delete curr;
465 // prev stays the same.
466 } else {
467 prev = curr;
|
424 // adjust pcs_size so that it is a multiple of both oopSize and
425 // sizeof(PcDesc) (assumes that if sizeof(PcDesc) is not a multiple
426 // of oopSize, then 2*sizeof(PcDesc) is)
427 static int adjust_pcs_size(int pcs_size) {
428 int nsize = round_to(pcs_size, oopSize);
429 if ((nsize % sizeof(PcDesc)) != 0) {
430 nsize = pcs_size + sizeof(PcDesc);
431 }
432 assert((nsize % oopSize) == 0, "correct alignment");
433 return nsize;
434 }
435
436 //-----------------------------------------------------------------------------
437
438
439 void nmethod::add_exception_cache_entry(ExceptionCache* new_entry) {
440 assert(ExceptionCache_lock->owned_by_self(),"Must hold the ExceptionCache_lock");
441 assert(new_entry != NULL,"Must be non null");
442 assert(new_entry->next() == NULL, "Must be null");
443
444 ExceptionCache *ec = exception_cache();
445 if (ec != NULL) {
446 new_entry->set_next(ec);
447 }
448 release_set_exception_cache(new_entry);
449 }
450
451 void nmethod::clean_exception_cache(BoolObjectClosure* is_alive) {
452 ExceptionCache* prev = NULL;
453 ExceptionCache* curr = exception_cache();
454
455 while (curr != NULL) {
456 ExceptionCache* next = curr->next();
457
458 Klass* ex_klass = curr->exception_type();
459 if (ex_klass != NULL && !ex_klass->is_loader_alive(is_alive)) {
460 if (prev == NULL) {
461 set_exception_cache(next);
462 } else {
463 prev->set_next(next);
464 }
465 delete curr;
466 // prev stays the same.
467 } else {
468 prev = curr;
|