< prev index next >

src/hotspot/share/services/management.cpp

Print this page




1628   _names_strings = names;
1629   _names_len = names->length();
1630   _names_chars = NEW_C_HEAP_ARRAY(char*, _names_len, mtInternal);
1631   _times = times;
1632   _times_len = times->length();
1633   _count = 0;
1634 }
1635 
1636 //
1637 // Called with Threads_lock held
1638 //
1639 void ThreadTimesClosure::do_thread(Thread* thread) {
1640   assert(Threads_lock->owned_by_self(), "Must hold Threads_lock");
1641   assert(thread != NULL, "thread was NULL");
1642 
1643   // exclude externally visible JavaThreads
1644   if (thread->is_Java_thread() && !thread->is_hidden_from_external_view()) {
1645     return;
1646   }
1647 
1648   // NonJavaThread instances may not be fully initialized yet, so we need to
1649   // skip any that aren't - check for zero stack_size()
1650   if (!thread->is_Java_thread() && thread->stack_size() == 0) {
1651     return;
1652   }
1653 
1654   if (_count >= _names_len || _count >= _times_len) {
1655     // skip if the result array is not big enough
1656     return;
1657   }
1658 
1659   EXCEPTION_MARK;
1660   ResourceMark rm(THREAD); // thread->name() uses ResourceArea
1661 
1662   assert(thread->name() != NULL, "All threads should have a name");
1663   _names_chars[_count] = os::strdup(thread->name());
1664   _times->long_at_put(_count, os::is_thread_cpu_time_supported() ?
1665                         os::thread_cpu_time(thread) : -1);
1666   _count++;
1667 }
1668 
1669 // Called without Threads_lock, we can allocate String objects.
1670 void ThreadTimesClosure::do_unlocked() {
1671 
1672   EXCEPTION_MARK;
1673   for (int i = 0; i < _count; i++) {




1628   _names_strings = names;
1629   _names_len = names->length();
1630   _names_chars = NEW_C_HEAP_ARRAY(char*, _names_len, mtInternal);
1631   _times = times;
1632   _times_len = times->length();
1633   _count = 0;
1634 }
1635 
1636 //
1637 // Called with Threads_lock held
1638 //
1639 void ThreadTimesClosure::do_thread(Thread* thread) {
1640   assert(Threads_lock->owned_by_self(), "Must hold Threads_lock");
1641   assert(thread != NULL, "thread was NULL");
1642 
1643   // exclude externally visible JavaThreads
1644   if (thread->is_Java_thread() && !thread->is_hidden_from_external_view()) {
1645     return;
1646   }
1647 






1648   if (_count >= _names_len || _count >= _times_len) {
1649     // skip if the result array is not big enough
1650     return;
1651   }
1652 
1653   EXCEPTION_MARK;
1654   ResourceMark rm(THREAD); // thread->name() uses ResourceArea
1655 
1656   assert(thread->name() != NULL, "All threads should have a name");
1657   _names_chars[_count] = os::strdup(thread->name());
1658   _times->long_at_put(_count, os::is_thread_cpu_time_supported() ?
1659                         os::thread_cpu_time(thread) : -1);
1660   _count++;
1661 }
1662 
1663 // Called without Threads_lock, we can allocate String objects.
1664 void ThreadTimesClosure::do_unlocked() {
1665 
1666   EXCEPTION_MARK;
1667   for (int i = 0; i < _count; i++) {


< prev index next >