Вы можете использовать:
UIFont *font = [UIFont boldSystemFontOfSize:16];
CGRect new = [string boundingRectWithSize:CGSizeMake(200, 300)
options:NSStringDrawingUsesFontLeading
attributes:@{NSFontAttributeName: font}
context:nil];
CGSize stringSize= new.size;
Try looking at the Hot Thread Detector plugin for visual VM -- it uses the ThreadMXBean API to take multiple CPU consumption samples to find the most active threads. It's based on a command-line equivalent from Bruce Chapman which might also be useful.
Если вы работаете под Windows, попробуйте Process Explorer . Откройте диалоговое окно свойств вашего процесса, затем выберите вкладку Threads.
Обратите внимание на плагин Top Threads для JConsole.
Просто запустите JVisualVM, подключитесь к своему приложению и используйте представление потока. Тот, кто остается постоянно активным, является вашим наиболее вероятным виновником.
Возьмите дамп потока. Подождите 10 секунд. Возьмите другой дамп потока. Повторите еще раз. Проверьте дампы потоков и посмотрите, какие потоки застряли в одном месте или обрабатывают один и тот же запрос. Это ручной способ сделать это, но часто бывает полезно.
Вы используете Java 6 на многоядерном компьютере?
Скорее всего, вы страдаете от проблемы, которую я только что описал в статье о нехватке потоков.
This is a kind of hacky way, but it seems like you could fire the application up in a debugger, and then suspend all the threads, and go through the code and find out which one isn't blocking on a lock or an I/O call in some kind of loop. Or is this like what you've already tried?
Вариант, который вы могли бы рассмотреть, - это запросить ответы в ваших потоках изнутри приложения. С помощью ThreadMXBean вы можете запрашивать использование ЦП потоков из вашего Java-приложения и запрашивать трассировки стека нарушающих потоков.
Параметр ThreadMXBean позволяет вам встроить такой вид мониторинга в вашу жизнь применение. Он имеет незначительное влияние и имеет явное преимущество в том, что вы можете заставить его делать именно то, что вы хотите.
Если вы подозреваете, что VisualVM - хороший инструмент, попробуйте его (потому что он делает это). Выяснение, что потоки помогают вам понять, почему он потребляет так много ресурсов процессора.
Однако, если это так очевидно, я бы сразу перешел к использованию профилировщика, чтобы выяснить, почему вы потребляете так много ресурсов процессора.