mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +02:00
7033154: Improve C1 arraycopy performance
Better static analysis. Take advantage of array copy stubs. Reviewed-by: never
This commit is contained in:
parent
00eca5e982
commit
f94d7776ca
13 changed files with 720 additions and 146 deletions
|
@ -103,7 +103,10 @@ const char *Runtime1::_blob_names[] = {
|
|||
int Runtime1::_generic_arraycopy_cnt = 0;
|
||||
int Runtime1::_primitive_arraycopy_cnt = 0;
|
||||
int Runtime1::_oop_arraycopy_cnt = 0;
|
||||
int Runtime1::_generic_arraycopystub_cnt = 0;
|
||||
int Runtime1::_arraycopy_slowcase_cnt = 0;
|
||||
int Runtime1::_arraycopy_checkcast_cnt = 0;
|
||||
int Runtime1::_arraycopy_checkcast_attempt_cnt = 0;
|
||||
int Runtime1::_new_type_array_slowcase_cnt = 0;
|
||||
int Runtime1::_new_object_array_slowcase_cnt = 0;
|
||||
int Runtime1::_new_instance_slowcase_cnt = 0;
|
||||
|
@ -119,6 +122,32 @@ int Runtime1::_throw_class_cast_exception_count = 0;
|
|||
int Runtime1::_throw_incompatible_class_change_error_count = 0;
|
||||
int Runtime1::_throw_array_store_exception_count = 0;
|
||||
int Runtime1::_throw_count = 0;
|
||||
|
||||
static int _byte_arraycopy_cnt = 0;
|
||||
static int _short_arraycopy_cnt = 0;
|
||||
static int _int_arraycopy_cnt = 0;
|
||||
static int _long_arraycopy_cnt = 0;
|
||||
static int _oop_arraycopy_cnt = 0;
|
||||
|
||||
address Runtime1::arraycopy_count_address(BasicType type) {
|
||||
switch (type) {
|
||||
case T_BOOLEAN:
|
||||
case T_BYTE: return (address)&_byte_arraycopy_cnt;
|
||||
case T_CHAR:
|
||||
case T_SHORT: return (address)&_short_arraycopy_cnt;
|
||||
case T_FLOAT:
|
||||
case T_INT: return (address)&_int_arraycopy_cnt;
|
||||
case T_DOUBLE:
|
||||
case T_LONG: return (address)&_long_arraycopy_cnt;
|
||||
case T_ARRAY:
|
||||
case T_OBJECT: return (address)&_oop_arraycopy_cnt;
|
||||
default:
|
||||
ShouldNotReachHere();
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// Simple helper to see if the caller of a runtime stub which
|
||||
|
@ -1229,9 +1258,17 @@ void Runtime1::print_statistics() {
|
|||
tty->print_cr(" _handle_wrong_method_cnt: %d", SharedRuntime::_wrong_method_ctr);
|
||||
tty->print_cr(" _ic_miss_cnt: %d", SharedRuntime::_ic_miss_ctr);
|
||||
tty->print_cr(" _generic_arraycopy_cnt: %d", _generic_arraycopy_cnt);
|
||||
tty->print_cr(" _generic_arraycopystub_cnt: %d", _generic_arraycopystub_cnt);
|
||||
tty->print_cr(" _byte_arraycopy_cnt: %d", _byte_arraycopy_cnt);
|
||||
tty->print_cr(" _short_arraycopy_cnt: %d", _short_arraycopy_cnt);
|
||||
tty->print_cr(" _int_arraycopy_cnt: %d", _int_arraycopy_cnt);
|
||||
tty->print_cr(" _long_arraycopy_cnt: %d", _long_arraycopy_cnt);
|
||||
tty->print_cr(" _primitive_arraycopy_cnt: %d", _primitive_arraycopy_cnt);
|
||||
tty->print_cr(" _oop_arraycopy_cnt: %d", _oop_arraycopy_cnt);
|
||||
tty->print_cr(" _oop_arraycopy_cnt (C): %d", Runtime1::_oop_arraycopy_cnt);
|
||||
tty->print_cr(" _oop_arraycopy_cnt (stub): %d", _oop_arraycopy_cnt);
|
||||
tty->print_cr(" _arraycopy_slowcase_cnt: %d", _arraycopy_slowcase_cnt);
|
||||
tty->print_cr(" _arraycopy_checkcast_cnt: %d", _arraycopy_checkcast_cnt);
|
||||
tty->print_cr(" _arraycopy_checkcast_attempt_cnt:%d", _arraycopy_checkcast_attempt_cnt);
|
||||
|
||||
tty->print_cr(" _new_type_array_slowcase_cnt: %d", _new_type_array_slowcase_cnt);
|
||||
tty->print_cr(" _new_object_array_slowcase_cnt: %d", _new_object_array_slowcase_cnt);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue