comparison src/share/vm/opto/output.cpp @ 10114:a7fb14888912

8006952: Slow VM due to excessive code cache freelist iteration Summary: Remove continous free block requirement Reviewed-by: kvn
author neliasso
date Thu, 11 Apr 2013 13:57:44 +0200
parents 0a8c2ea3902d
children e10e43e58e92
comparison
equal deleted inserted replaced
10113:4b2eebe03f93 10114:a7fb14888912
1042 1042
1043 // Mark the end of the scope set. 1043 // Mark the end of the scope set.
1044 debug_info->end_non_safepoint(pc_offset); 1044 debug_info->end_non_safepoint(pc_offset);
1045 } 1045 }
1046 1046
1047
1048
1049 // helper for fill_buffer bailout logic
1050 static void turn_off_compiler(Compile* C) {
1051 if (CodeCache::largest_free_block() >= CodeCacheMinimumFreeSpace*10) {
1052 // Do not turn off compilation if a single giant method has
1053 // blown the code cache size.
1054 C->record_failure("excessive request to CodeCache");
1055 } else {
1056 // Let CompilerBroker disable further compilations.
1057 C->record_failure("CodeCache is full");
1058 }
1059 }
1060
1061
1062 //------------------------------init_buffer------------------------------------ 1047 //------------------------------init_buffer------------------------------------
1063 CodeBuffer* Compile::init_buffer(uint* blk_starts) { 1048 CodeBuffer* Compile::init_buffer(uint* blk_starts) {
1064 1049
1065 // Set the initially allocated size 1050 // Set the initially allocated size
1066 int code_req = initial_code_capacity; 1051 int code_req = initial_code_capacity;
1156 CodeBuffer* cb = code_buffer(); 1141 CodeBuffer* cb = code_buffer();
1157 cb->initialize(total_req, locs_req); 1142 cb->initialize(total_req, locs_req);
1158 1143
1159 // Have we run out of code space? 1144 // Have we run out of code space?
1160 if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) { 1145 if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
1161 turn_off_compiler(this); 1146 C->record_failure("CodeCache is full");
1162 return NULL; 1147 return NULL;
1163 } 1148 }
1164 // Configure the code buffer. 1149 // Configure the code buffer.
1165 cb->initialize_consts_size(const_req); 1150 cb->initialize_consts_size(const_req);
1166 cb->initialize_stubs_size(stub_req); 1151 cb->initialize_stubs_size(stub_req);
1474 } 1459 }
1475 1460
1476 // Verify that there is sufficient space remaining 1461 // Verify that there is sufficient space remaining
1477 cb->insts()->maybe_expand_to_ensure_remaining(MAX_inst_size); 1462 cb->insts()->maybe_expand_to_ensure_remaining(MAX_inst_size);
1478 if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) { 1463 if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
1479 turn_off_compiler(this); 1464 C->record_failure("CodeCache is full");
1480 return; 1465 return;
1481 } 1466 }
1482 1467
1483 // Save the offset for the listing 1468 // Save the offset for the listing
1484 #ifndef PRODUCT 1469 #ifndef PRODUCT
1631 } 1616 }
1632 } 1617 }
1633 1618
1634 // One last check for failed CodeBuffer::expand: 1619 // One last check for failed CodeBuffer::expand:
1635 if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) { 1620 if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
1636 turn_off_compiler(this); 1621 C->record_failure("CodeCache is full");
1637 return; 1622 return;
1638 } 1623 }
1639 1624
1640 #ifndef PRODUCT 1625 #ifndef PRODUCT
1641 // Dump the assembly code, including basic-block numbers 1626 // Dump the assembly code, including basic-block numbers