46 // Globals |
46 // Globals |
47 |
47 |
48 PerfCounter* ClassLoader::_perf_accumulated_time = NULL; |
48 PerfCounter* ClassLoader::_perf_accumulated_time = NULL; |
49 PerfCounter* ClassLoader::_perf_classes_inited = NULL; |
49 PerfCounter* ClassLoader::_perf_classes_inited = NULL; |
50 PerfCounter* ClassLoader::_perf_class_init_time = NULL; |
50 PerfCounter* ClassLoader::_perf_class_init_time = NULL; |
|
51 PerfCounter* ClassLoader::_perf_class_init_selftime = NULL; |
|
52 PerfCounter* ClassLoader::_perf_classes_verified = NULL; |
51 PerfCounter* ClassLoader::_perf_class_verify_time = NULL; |
53 PerfCounter* ClassLoader::_perf_class_verify_time = NULL; |
|
54 PerfCounter* ClassLoader::_perf_class_verify_selftime = NULL; |
52 PerfCounter* ClassLoader::_perf_classes_linked = NULL; |
55 PerfCounter* ClassLoader::_perf_classes_linked = NULL; |
53 PerfCounter* ClassLoader::_perf_class_link_time = NULL; |
56 PerfCounter* ClassLoader::_perf_class_link_time = NULL; |
|
57 PerfCounter* ClassLoader::_perf_class_link_selftime = NULL; |
|
58 PerfCounter* ClassLoader::_perf_class_parse_time = NULL; |
|
59 PerfCounter* ClassLoader::_perf_class_parse_selftime = NULL; |
|
60 PerfCounter* ClassLoader::_perf_sys_class_lookup_time = NULL; |
|
61 PerfCounter* ClassLoader::_perf_shared_classload_time = NULL; |
|
62 PerfCounter* ClassLoader::_perf_sys_classload_time = NULL; |
|
63 PerfCounter* ClassLoader::_perf_app_classload_time = NULL; |
|
64 PerfCounter* ClassLoader::_perf_app_classload_selftime = NULL; |
|
65 PerfCounter* ClassLoader::_perf_app_classload_count = NULL; |
|
66 PerfCounter* ClassLoader::_perf_define_appclasses = NULL; |
|
67 PerfCounter* ClassLoader::_perf_define_appclass_time = NULL; |
|
68 PerfCounter* ClassLoader::_perf_define_appclass_selftime = NULL; |
|
69 PerfCounter* ClassLoader::_perf_app_classfile_bytes_read = NULL; |
|
70 PerfCounter* ClassLoader::_perf_sys_classfile_bytes_read = NULL; |
54 PerfCounter* ClassLoader::_sync_systemLoaderLockContentionRate = NULL; |
71 PerfCounter* ClassLoader::_sync_systemLoaderLockContentionRate = NULL; |
55 PerfCounter* ClassLoader::_sync_nonSystemLoaderLockContentionRate = NULL; |
72 PerfCounter* ClassLoader::_sync_nonSystemLoaderLockContentionRate = NULL; |
56 PerfCounter* ClassLoader::_sync_JVMFindLoadedClassLockFreeCounter = NULL; |
73 PerfCounter* ClassLoader::_sync_JVMFindLoadedClassLockFreeCounter = NULL; |
57 PerfCounter* ClassLoader::_sync_JVMDefineClassLockFreeCounter = NULL; |
74 PerfCounter* ClassLoader::_sync_JVMDefineClassLockFreeCounter = NULL; |
58 PerfCounter* ClassLoader::_sync_JNIDefineClassLockFreeCounter = NULL; |
75 PerfCounter* ClassLoader::_sync_JNIDefineClassLockFreeCounter = NULL; |
150 size_t num_read = os::read(file_handle, (char*) buffer, st.st_size); |
167 size_t num_read = os::read(file_handle, (char*) buffer, st.st_size); |
151 // close file |
168 // close file |
152 hpi::close(file_handle); |
169 hpi::close(file_handle); |
153 // construct ClassFileStream |
170 // construct ClassFileStream |
154 if (num_read == (size_t)st.st_size) { |
171 if (num_read == (size_t)st.st_size) { |
|
172 if (UsePerfData) { |
|
173 ClassLoader::perf_sys_classfile_bytes_read()->inc(num_read); |
|
174 } |
155 return new ClassFileStream(buffer, st.st_size, _dir); // Resource allocated |
175 return new ClassFileStream(buffer, st.st_size, _dir); // Resource allocated |
156 } |
176 } |
157 } |
177 } |
158 } |
178 } |
159 return NULL; |
179 return NULL; |
195 !(*ReadMappedEntry)(_zip, entry, &buffer, filename)) { |
215 !(*ReadMappedEntry)(_zip, entry, &buffer, filename)) { |
196 // mmaped access not available, perhaps due to compression, |
216 // mmaped access not available, perhaps due to compression, |
197 // read contents into resource array |
217 // read contents into resource array |
198 buffer = NEW_RESOURCE_ARRAY(u1, filesize); |
218 buffer = NEW_RESOURCE_ARRAY(u1, filesize); |
199 if (!(*ReadEntry)(_zip, entry, buffer, filename)) return NULL; |
219 if (!(*ReadEntry)(_zip, entry, buffer, filename)) return NULL; |
|
220 } |
|
221 if (UsePerfData) { |
|
222 ClassLoader::perf_sys_classfile_bytes_read()->inc(filesize); |
200 } |
223 } |
201 // return result |
224 // return result |
202 return new ClassFileStream(buffer, filesize, _zip_name); // Resource allocated |
225 return new ClassFileStream(buffer, filesize, _zip_name); // Resource allocated |
203 } |
226 } |
204 |
227 |
823 |
846 |
824 // Lookup stream for parsing .class file |
847 // Lookup stream for parsing .class file |
825 ClassFileStream* stream = NULL; |
848 ClassFileStream* stream = NULL; |
826 int classpath_index = 0; |
849 int classpath_index = 0; |
827 { |
850 { |
828 PerfTraceTime vmtimer(perf_accumulated_time()); |
851 PerfClassTraceTime vmtimer(perf_sys_class_lookup_time(), |
|
852 ((JavaThread*) THREAD)->get_thread_stat()->perf_timers_addr(), |
|
853 PerfClassTraceTime::CLASS_LOAD); |
829 ClassPathEntry* e = _first_entry; |
854 ClassPathEntry* e = _first_entry; |
830 while (e != NULL) { |
855 while (e != NULL) { |
831 stream = e->open_stream(name); |
856 stream = e->open_stream(name); |
832 if (stream != NULL) { |
857 if (stream != NULL) { |
833 break; |
858 break; |
888 |
913 |
889 if (UsePerfData) { |
914 if (UsePerfData) { |
890 // jvmstat performance counters |
915 // jvmstat performance counters |
891 NEWPERFTICKCOUNTER(_perf_accumulated_time, SUN_CLS, "time"); |
916 NEWPERFTICKCOUNTER(_perf_accumulated_time, SUN_CLS, "time"); |
892 NEWPERFTICKCOUNTER(_perf_class_init_time, SUN_CLS, "classInitTime"); |
917 NEWPERFTICKCOUNTER(_perf_class_init_time, SUN_CLS, "classInitTime"); |
|
918 NEWPERFTICKCOUNTER(_perf_class_init_selftime, SUN_CLS, "classInitTime.self"); |
893 NEWPERFTICKCOUNTER(_perf_class_verify_time, SUN_CLS, "classVerifyTime"); |
919 NEWPERFTICKCOUNTER(_perf_class_verify_time, SUN_CLS, "classVerifyTime"); |
|
920 NEWPERFTICKCOUNTER(_perf_class_verify_selftime, SUN_CLS, "classVerifyTime.self"); |
894 NEWPERFTICKCOUNTER(_perf_class_link_time, SUN_CLS, "classLinkedTime"); |
921 NEWPERFTICKCOUNTER(_perf_class_link_time, SUN_CLS, "classLinkedTime"); |
895 |
922 NEWPERFTICKCOUNTER(_perf_class_link_selftime, SUN_CLS, "classLinkedTime.self"); |
896 NEWPERFEVENTCOUNTER(_perf_classes_inited, SUN_CLS, "initializedClasses"); |
923 NEWPERFEVENTCOUNTER(_perf_classes_inited, SUN_CLS, "initializedClasses"); |
897 NEWPERFEVENTCOUNTER(_perf_classes_linked, SUN_CLS, "linkedClasses"); |
924 NEWPERFEVENTCOUNTER(_perf_classes_linked, SUN_CLS, "linkedClasses"); |
|
925 NEWPERFEVENTCOUNTER(_perf_classes_verified, SUN_CLS, "verifiedClasses"); |
|
926 |
|
927 NEWPERFTICKCOUNTER(_perf_class_parse_time, SUN_CLS, "parseClassTime"); |
|
928 NEWPERFTICKCOUNTER(_perf_class_parse_selftime, SUN_CLS, "parseClassTime.self"); |
|
929 NEWPERFTICKCOUNTER(_perf_sys_class_lookup_time, SUN_CLS, "lookupSysClassTime"); |
|
930 NEWPERFTICKCOUNTER(_perf_shared_classload_time, SUN_CLS, "sharedClassLoadTime"); |
|
931 NEWPERFTICKCOUNTER(_perf_sys_classload_time, SUN_CLS, "sysClassLoadTime"); |
|
932 NEWPERFTICKCOUNTER(_perf_app_classload_time, SUN_CLS, "appClassLoadTime"); |
|
933 NEWPERFTICKCOUNTER(_perf_app_classload_selftime, SUN_CLS, "appClassLoadTime.self"); |
|
934 NEWPERFEVENTCOUNTER(_perf_app_classload_count, SUN_CLS, "appClassLoadCount"); |
|
935 NEWPERFTICKCOUNTER(_perf_define_appclasses, SUN_CLS, "defineAppClasses"); |
|
936 NEWPERFTICKCOUNTER(_perf_define_appclass_time, SUN_CLS, "defineAppClassTime"); |
|
937 NEWPERFTICKCOUNTER(_perf_define_appclass_selftime, SUN_CLS, "defineAppClassTime.self"); |
|
938 NEWPERFBYTECOUNTER(_perf_app_classfile_bytes_read, SUN_CLS, "appClassBytes"); |
|
939 NEWPERFBYTECOUNTER(_perf_sys_classfile_bytes_read, SUN_CLS, "sysClassBytes"); |
|
940 |
898 |
941 |
899 // The following performance counters are added for measuring the impact |
942 // The following performance counters are added for measuring the impact |
900 // of the bug fix of 6365597. They are mainly focused on finding out |
943 // of the bug fix of 6365597. They are mainly focused on finding out |
901 // the behavior of system & user-defined classloader lock, whether |
944 // the behavior of system & user-defined classloader lock, whether |
902 // ClassLoader.loadClass/findClass is being called synchronized or not. |
945 // ClassLoader.loadClass/findClass is being called synchronized or not. |