8253453: SourceFileInfoTable should be allocated lazily

Reviewed-by: neliasso, chagedorn
This commit is contained in:
Claes Redestad 2020-10-19 10:49:33 +00:00
parent e10b53853a
commit e9be2db7ac

View file

@ -202,10 +202,17 @@ class decode_env {
15889, // prime number
ResourceObj::C_HEAP> SourceFileInfoTable;
static SourceFileInfoTable _src_table;
static SourceFileInfoTable* _src_table;
static const char* _cached_src;
static GrowableArray<const char*>* _cached_src_lines;
static SourceFileInfoTable& src_table() {
if (_src_table == NULL) {
_src_table = new (ResourceObj::C_HEAP, mtCode)SourceFileInfoTable();
}
return *_src_table;
}
public:
decode_env(CodeBuffer* code, outputStream* output);
decode_env(CodeBlob* code, outputStream* output, CodeStrings c = CodeStrings() /* , ptrdiff_t offset */);
@ -229,7 +236,7 @@ class decode_env {
bool decode_env::_optionsParsed = false;
decode_env::SourceFileInfoTable decode_env::_src_table;
decode_env::SourceFileInfoTable* decode_env::_src_table = NULL;
const char* decode_env::_cached_src = NULL;
GrowableArray<const char*>* decode_env::_cached_src_lines = NULL;
@ -238,17 +245,17 @@ void decode_env::hook(const char* file, int line, address pc) {
// necessary as we add to the table only when PrintInterpreter is true,
// which means we are debugging the VM and a little bit of extra
// memory usage doesn't matter.
SourceFileInfo* found = _src_table.get(pc);
SourceFileInfo* found = src_table().get(pc);
if (found != NULL) {
found->append(file, line);
} else {
SourceFileInfo sfi(file, line);
_src_table.put(pc, sfi); // sfi is copied by value
src_table().put(pc, sfi); // sfi is copied by value
}
}
void decode_env::print_hook_comments(address pc, bool newline) {
SourceFileInfo* found = _src_table.get(pc);
SourceFileInfo* found = src_table().get(pc);
outputStream* st = output();
if (found != NULL) {
for (SourceFileInfo::Link *link = found->head; link; link = link->next) {