Приложения в новейшей macOS пожирают всю память по смехотворной причине
После обновления операционной системы macOS до релиза Monterey на компьютерах Apple некоторые популярные приложения начали потреблять колоссальный объем памяти. Как выяснилось, виновата утечка памяти, которая начинается, когда пользователь меняет в настройках системы курсор мыши по умолчанию на указатель большего размера или нестандартного цвета. Чтобы решить проблему, достаточно откатить эти настройки к первоначальным.Поедающие память курсоры
Пользователи новейшей системы macOS Monterey 12.0.1 для компьютеров Apple столкнулись с чрезмерным потреблением оперативной памяти рядом популярных приложений. Специалисты утверждают, что причиной повышенного расходования данного ресурса является утечка памяти. Страдают от нее пользователи, которые выбрали в операционной системе нестандартный курсор мыши.
Как пишет The Register, практически сразу после релиза macOS Monterey в октябре 2021 г. владельцы компьютеров Mac, поспешившие обновиться, начали жаловаться на излишнюю «прожорливость» некоторых приложений в ней. В их числе были инструменты Adobe Creative Cloud, программы из состава Microsoft Office, пакет для создания трехмерной графики и анимации Cinema 4D, браузер Mozilla Firefox и Pages – текстовый процессор Apple. Доходило до того, что программы захватывали всю доступную системе память, после чего «падали».
Один из столкнувшихся с проблемой пользователей (@y80481629), выложил в Twitter скриншот экрана своего Macbook Pro под управлением macOS Monterey 12.0.1, из которого следует, что Firefox в его системе захватил 79,2 ГБ оперативной памяти. Это невероятно большой объем, даже для браузера, славящегося своим аппетитом к данному ресурсу. Налицо утечка оперативной памяти.
Что такое утечка памяти
Так называемая утечка памяти происходит, когда приложение резервирует под собственные нужды некоторый объем оперативной памяти, однако позднее, когда он становится ненужным, по той или иной причине не освобождает его и не возвращает операционной системе. Такой фрагмент памяти висит «мертвым грузом» – другие программы не могут им воспользоваться.
В языках программирования низкого уровня, таких как C, управление выделением и освобождением памяти осуществляет программист. Нередко утечки возникают в программах, где разработчики банально забыли указать инструкцию освобождения памяти.
Если фрагмент кода, в котором осуществляется выделение участка памяти без последующего освобождения, выполняется в приложении несколько раз ввиду архитектуры программы, то утечки могут накапливаться и со временем приводить к исчерпанию доступной памяти одним единственным приложением. В итоге операционная система (в зависимости от типа) может либо аварийно завершить работу данного приложения, либо зависнуть.
Необычная причина утечки
В понедельник, 15 ноября 2021 г., Говард Окли (Howard Oakley), программист и основатель интернет-ресурса Eclectic Light Company, опубликовал сообщение в своем блоге. В нем специалист выдвинул предположение о том, что в утечке памяти виновата группа настроек на панели «Специальные возможности» (Accessibility) macOS, которая управляет внешним видом курсора.
Согласно выводам Окли, проблемы с объемом потребляемой приложениями памяти возникают у тех пользователей, которые выбрали нестандартные настройки курсора мыши: увеличенный размер, произвольные цвета контура и заливки.
Как выяснил программист, «течь» при таких условиях может любое приложение, в котором курсор мыши меняет свою форму. Например, в редакторе Microsoft Word он может превращаться из стрелки в вертикальную черту, когда пользователь переводит указатель с панели инструментов на страницу с текстом, и наоборот.
Окли предполагает, что утечка происходит именно в момент смены внешнего вида курсора. При каждой из них система вновь и вновь загружает изображение указателя мыши нужной формы в память, не удаляя из нее предыдущие. Смена типа курсора происходит достаточно часто, даже при неспешной работе на компьютере, поэтому, если выводы специалиста верны, вся память может «утечь» весьма быстро.
Теория Окли подтверждается и Mozilla, которая разрабатывает браузер Firefox. Связь между использованием нестандартного курсора и масштабными утечками памяти в Firefox под macOS Monterey 12 там углядели еще до выхода публично сборки новой версии операционной системы. В Firefox 94 разработчики включили исправление, которое позволило уменьшить масштаб утечки памяти при использовании браузера, но не избавиться от проблемы окончательно.
В Mozilla также сообщили о том, что Apple известно о проблеме, а исправления следует ожидать в одном из будущих обновлений macOS 12. До его выхода можно прибегнуть к временному решению: вернуть стандартные параметры курсора и перезапустить систему.
По мнению разработчика ПО для macOS Стива Тротона-Смита (Steve Troughton-Smith), эта и другие проблемы утечки памяти в macOS 12, связаны с постепенным переносом Apple кода операционной системы с языка Objective-C на более современный Swift. Управление памятью в последнем осуществляется автоматически и, как считает программист, реализовано не лучшим образом. В качестве примера написанного на Swift продукта, нашпигованного «текучим» кодом, он приводит SwiftUI – фреймворк для создания пользовательского интерфейса.
Другие «болезни» macOS 12
Не для всех пользователей обновление до macOS 12 прошло безболезненно. Так, некоторые компьютеры Mac под управлением процессоров Intel переставали включаться после установки macOS Monterey, превращаясь в «кирпич». Как выяснилось впоследствии, проблема возникла из-за прошивки чипа безопасности T2.
В конце октября 2021 г. CNews писал о том, что после установки macOS Monterey ноутбуки Apple перестают корректно работать с внешними USB-концентраторами. Проблема носила массовый характер, но Apple не торопилась ее решать.