comparison src/share/vm/oops/instanceKlass.cpp @ 970:682194ca1d8d

Merge
author acorn
date Thu, 10 Sep 2009 09:04:41 -0400
parents 75e30968ebe1 9eebd3ac74cf
children 26b774d693aa
comparison
equal deleted inserted replaced
969:0804a88ed4f5 970:682194ca1d8d
1395 #define InstanceKlass_OOP_MAP_ITERATE(obj, do_oop, assert_fn) \ 1395 #define InstanceKlass_OOP_MAP_ITERATE(obj, do_oop, assert_fn) \
1396 { \ 1396 { \
1397 /* Compute oopmap block range. The common case \ 1397 /* Compute oopmap block range. The common case \
1398 is nonstatic_oop_map_size == 1. */ \ 1398 is nonstatic_oop_map_size == 1. */ \
1399 OopMapBlock* map = start_of_nonstatic_oop_maps(); \ 1399 OopMapBlock* map = start_of_nonstatic_oop_maps(); \
1400 OopMapBlock* const end_map = map + nonstatic_oop_map_size(); \ 1400 OopMapBlock* const end_map = map + nonstatic_oop_map_count(); \
1401 if (UseCompressedOops) { \ 1401 if (UseCompressedOops) { \
1402 while (map < end_map) { \ 1402 while (map < end_map) { \
1403 InstanceKlass_SPECIALIZED_OOP_ITERATE(narrowOop, \ 1403 InstanceKlass_SPECIALIZED_OOP_ITERATE(narrowOop, \
1404 obj->obj_field_addr<narrowOop>(map->offset()), map->length(), \ 1404 obj->obj_field_addr<narrowOop>(map->offset()), map->count(), \
1405 do_oop, assert_fn) \ 1405 do_oop, assert_fn) \
1406 ++map; \ 1406 ++map; \
1407 } \ 1407 } \
1408 } else { \ 1408 } else { \
1409 while (map < end_map) { \ 1409 while (map < end_map) { \
1410 InstanceKlass_SPECIALIZED_OOP_ITERATE(oop, \ 1410 InstanceKlass_SPECIALIZED_OOP_ITERATE(oop, \
1411 obj->obj_field_addr<oop>(map->offset()), map->length(), \ 1411 obj->obj_field_addr<oop>(map->offset()), map->count(), \
1412 do_oop, assert_fn) \ 1412 do_oop, assert_fn) \
1413 ++map; \ 1413 ++map; \
1414 } \ 1414 } \
1415 } \ 1415 } \
1416 } 1416 }
1417 1417
1418 #define InstanceKlass_OOP_MAP_REVERSE_ITERATE(obj, do_oop, assert_fn) \ 1418 #define InstanceKlass_OOP_MAP_REVERSE_ITERATE(obj, do_oop, assert_fn) \
1419 { \ 1419 { \
1420 OopMapBlock* const start_map = start_of_nonstatic_oop_maps(); \ 1420 OopMapBlock* const start_map = start_of_nonstatic_oop_maps(); \
1421 OopMapBlock* map = start_map + nonstatic_oop_map_size(); \ 1421 OopMapBlock* map = start_map + nonstatic_oop_map_count(); \
1422 if (UseCompressedOops) { \ 1422 if (UseCompressedOops) { \
1423 while (start_map < map) { \ 1423 while (start_map < map) { \
1424 --map; \ 1424 --map; \
1425 InstanceKlass_SPECIALIZED_OOP_REVERSE_ITERATE(narrowOop, \ 1425 InstanceKlass_SPECIALIZED_OOP_REVERSE_ITERATE(narrowOop, \
1426 obj->obj_field_addr<narrowOop>(map->offset()), map->length(), \ 1426 obj->obj_field_addr<narrowOop>(map->offset()), map->count(), \
1427 do_oop, assert_fn) \ 1427 do_oop, assert_fn) \
1428 } \ 1428 } \
1429 } else { \ 1429 } else { \
1430 while (start_map < map) { \ 1430 while (start_map < map) { \
1431 --map; \ 1431 --map; \
1432 InstanceKlass_SPECIALIZED_OOP_REVERSE_ITERATE(oop, \ 1432 InstanceKlass_SPECIALIZED_OOP_REVERSE_ITERATE(oop, \
1433 obj->obj_field_addr<oop>(map->offset()), map->length(), \ 1433 obj->obj_field_addr<oop>(map->offset()), map->count(), \
1434 do_oop, assert_fn) \ 1434 do_oop, assert_fn) \
1435 } \ 1435 } \
1436 } \ 1436 } \
1437 } 1437 }
1438 1438
1442 /* Compute oopmap block range. The common case is \ 1442 /* Compute oopmap block range. The common case is \
1443 nonstatic_oop_map_size == 1, so we accept the \ 1443 nonstatic_oop_map_size == 1, so we accept the \
1444 usually non-existent extra overhead of examining \ 1444 usually non-existent extra overhead of examining \
1445 all the maps. */ \ 1445 all the maps. */ \
1446 OopMapBlock* map = start_of_nonstatic_oop_maps(); \ 1446 OopMapBlock* map = start_of_nonstatic_oop_maps(); \
1447 OopMapBlock* const end_map = map + nonstatic_oop_map_size(); \ 1447 OopMapBlock* const end_map = map + nonstatic_oop_map_count(); \
1448 if (UseCompressedOops) { \ 1448 if (UseCompressedOops) { \
1449 while (map < end_map) { \ 1449 while (map < end_map) { \
1450 InstanceKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(narrowOop, \ 1450 InstanceKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(narrowOop, \
1451 obj->obj_field_addr<narrowOop>(map->offset()), map->length(), \ 1451 obj->obj_field_addr<narrowOop>(map->offset()), map->count(), \
1452 low, high, \ 1452 low, high, \
1453 do_oop, assert_fn) \ 1453 do_oop, assert_fn) \
1454 ++map; \ 1454 ++map; \
1455 } \ 1455 } \
1456 } else { \ 1456 } else { \
1457 while (map < end_map) { \ 1457 while (map < end_map) { \
1458 InstanceKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(oop, \ 1458 InstanceKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(oop, \
1459 obj->obj_field_addr<oop>(map->offset()), map->length(), \ 1459 obj->obj_field_addr<oop>(map->offset()), map->count(), \
1460 low, high, \ 1460 low, high, \
1461 do_oop, assert_fn) \ 1461 do_oop, assert_fn) \
1462 ++map; \ 1462 ++map; \
1463 } \ 1463 } \
1464 } \ 1464 } \
2215 static bool first_time = true; 2215 static bool first_time = true;
2216 guarantee(k == SystemDictionary::class_klass() && first_time, "Invalid verify of maps"); 2216 guarantee(k == SystemDictionary::class_klass() && first_time, "Invalid verify of maps");
2217 first_time = false; 2217 first_time = false;
2218 const int extra = java_lang_Class::number_of_fake_oop_fields; 2218 const int extra = java_lang_Class::number_of_fake_oop_fields;
2219 guarantee(ik->nonstatic_field_size() == extra, "just checking"); 2219 guarantee(ik->nonstatic_field_size() == extra, "just checking");
2220 guarantee(ik->nonstatic_oop_map_size() == 1, "just checking"); 2220 guarantee(ik->nonstatic_oop_map_count() == 1, "just checking");
2221 guarantee(ik->size_helper() == align_object_size(instanceOopDesc::header_size() + extra), "just checking"); 2221 guarantee(ik->size_helper() == align_object_size(instanceOopDesc::header_size() + extra), "just checking");
2222 2222
2223 // Check that the map is (2,extra) 2223 // Check that the map is (2,extra)
2224 int offset = java_lang_Class::klass_offset; 2224 int offset = java_lang_Class::klass_offset;
2225 2225
2226 OopMapBlock* map = ik->start_of_nonstatic_oop_maps(); 2226 OopMapBlock* map = ik->start_of_nonstatic_oop_maps();
2227 guarantee(map->offset() == offset && map->length() == extra, "just checking"); 2227 guarantee(map->offset() == offset && map->count() == (unsigned int) extra,
2228 "sanity");
2228 } 2229 }
2229 } 2230 }
2230 2231
2231 #endif // ndef PRODUCT 2232 #endif // ndef PRODUCT
2232 2233