619 if (obj == NULL) {
620 return 0;
621 } else if (obj->klass() == SystemDictionary::String_klass()) {
622 return (obj->size() + java_lang_String::value(obj)->size()) * HeapWordSize;
623 } else {
624 return obj->size();
625 }
626 }
627
628 struct SizeFunc : StackObj {
629 size_t operator()(WeakHandle<vm_string_table_data>* val) {
630 oop s = val->peek();
631 if (s == NULL) {
632 // Dead
633 return 0;
634 }
635 return literal_size(s);
636 };
637 };
638
639 void StringTable::print_table_statistics(outputStream* st,
640 const char* table_name) {
641 SizeFunc sz;
642 _local_table->statistics_to(Thread::current(), sz, st, table_name);
643 }
644
645 // Verification
646 class VerifyStrings : StackObj {
647 public:
648 bool operator()(WeakHandle<vm_string_table_data>* val) {
649 oop s = val->peek();
650 if (s != NULL) {
651 assert(java_lang_String::length(s) >= 0, "Length on string must work.");
652 }
653 return true;
654 };
655 };
656
657 // This verification is part of Universe::verify() and needs to be quick.
658 void StringTable::verify() {
|
619 if (obj == NULL) {
620 return 0;
621 } else if (obj->klass() == SystemDictionary::String_klass()) {
622 return (obj->size() + java_lang_String::value(obj)->size()) * HeapWordSize;
623 } else {
624 return obj->size();
625 }
626 }
627
628 struct SizeFunc : StackObj {
629 size_t operator()(WeakHandle<vm_string_table_data>* val) {
630 oop s = val->peek();
631 if (s == NULL) {
632 // Dead
633 return 0;
634 }
635 return literal_size(s);
636 };
637 };
638
639 TableStatistics StringTable::get_table_statistics() {
640 static TableStatistics ts;
641 SizeFunc sz;
642 ts = _local_table->statistics_get(Thread::current(), sz, ts);
643 return ts;
644 }
645
646 void StringTable::print_table_statistics(outputStream* st,
647 const char* table_name) {
648 SizeFunc sz;
649 _local_table->statistics_to(Thread::current(), sz, st, table_name);
650 }
651
652 // Verification
653 class VerifyStrings : StackObj {
654 public:
655 bool operator()(WeakHandle<vm_string_table_data>* val) {
656 oop s = val->peek();
657 if (s != NULL) {
658 assert(java_lang_String::length(s) >= 0, "Length on string must work.");
659 }
660 return true;
661 };
662 };
663
664 // This verification is part of Universe::verify() and needs to be quick.
665 void StringTable::verify() {
|