Symbian s60 і uiq 3

Почнемо з термінів. У них багато плутанини завдяки стандартними програмами Series 60.

Але страшніше інше. Якщо при запуску програми не вистачає оперативної пам'яті - користувачеві видається помилка «Мало пам'яті». Якщо при установці програми не вистачає місця на диску - знову «мало пам'яті». Це здатне заплутати не тільки початківця користувача.

Ми розповімо про ОЗУ на всіх трьох платформах S60, однак написане для S60 3rd вірно і для UIQ 3.x. так як обидві ці платформи працюють на ОС Symbian 9.

На перших апаратах Series 60 - Nokia 7650 і Nokia 3650 - було всього 4 Мб пам'яті, користувачеві залишалося 3,6 Мб. Цього обсягу постійно не вистачало. В Nokia N-Gage (теж S60 1st) з'явилося в 4 рази більше ОЗУ - 16 Мб. На апаратах S60 2nd пам'яті стало ще більше. Наприклад, на Nokia 6630 - 20 Мб, а що лежить переді мною Nokia N70 показує дуже хорошу цифру - 53 Мб загальної пам'яті і 32 Мб вільної.

Серед пристроїв Symbian 9.x (S60 3rd) найкращий показник - 128 Мб на Nokia E90 і Nokia N95 8Gb. Хоча десь 50 Мб з них операційна система забирає на свої потреби, але залишився вистачає, щоб користувач собі ні в чому не відмовляв. На інших апаратах N-серії з S60 3rd обсяг оперативної пам'яті становить 64 або 96 Мб, що дозволяє відчувати себе цілком комфортно.

Як подивитися стан оперативної пам'яті

Отримати інформацію про оперативну пам'ять стандартними засобами не можна, для цього необхідно встановлювати додаткові програми. Як правило, відображати інформацію про оперативну пам'ять вміють файлові менеджери і менеджери задач. Вибір дуже великий.

Яку ж інформацію можна отримати про оперативну пам'ять?

2. Скільки пам'яті споживає та чи інша програма.

3. Детальна картина пам'яті по блокам.

Розглянемо пункти докладніше.

1. Загальна інформація про пам'ять

Функція ця вкрай проста в реалізації, а тому є присутнім у багатьох програмах. Ну, наприклад, файловий менеджер X-Plore - заходимо в Tools-> Device info:

Не впевнений, що це потрібно пересічному користувачеві, але програмістам і тестерам цей інструмент необхідний. З його допомогою можна легко виявити, за яких діях в програмі відбувається витік пам'яті.

2. Пам'ять, споживана програмою

На Symbian 6-7-8 (S60 1st і 2nd) отримати цю інформацію легко. Практично будь-який менеджер завдань показує обсяг оперативної пам'яті, споживаної запущеним додатком. AppMan, Handy TaskMan, Unreal Device Manager - словом, будь-яка програма, що працює з запущеними додатками. Програма TaskSpy навіть креслить графік споживання оперативки.

Все начебто добре. для тих користувачів, які побачили цю можливість, сказали «так, це круто» - і забули про неї. Існують і інші користувачі - ті, яким потрібна не просто якась цифра, а точна інформація. Такий користувач мислить інакше: «Дивно. Перед запуском програми було доступно 1000 Кб оперативки. Я запустив програму, подивився в менеджері завдань - програма споживає 200 Кб. Подивився доступну оперативну пам'ять - стало 500 Кб. Куди поділася решта 300 Кб? »

Така закономірність спостерігається практично з усіма програмами. Щось явно не враховується, але що саме?

А не враховується те, що при запуску програма і додаткові модулі до неї завантажуються в пам'ять. Тобто, щоб отримати реальний розмір пам'яті, споживаної програмою, до того, що показують менеджери задач, потрібно додати як мінімум розмір виконуваного файлу. А зовсім правильно буде - врахувати динамічні бібліотеки (dll), які завантажує програма, а також додаткові виконувані файли, які можуть не відображатися в менеджері завдань, але тим не менше запускаються і використовуються. З огляду на все це, можна вирахувати вірний обсяг споживаної пам'яті.

Особливо катастрофічна ситуація спостерігається з програмами на Java. Ці програми потрібно багато оперативної пам'яті, всім без винятку. І часто бувають ситуації, коли кількість доступної пам'яті наближається до нуля, а програми вивантажуються через нестачу оперативки. Менеджер завдань при цьому показує, що запущене Java-додаток споживає всього-то 45 Кб.

Виявляється, зовсім не враховується пам'ять, споживана віртуальної Java-машиною. Вона вимагає не менше 500 Кб, навіть для самого невинного калькулятора. Чи може користувач дізнатися реальну або хоча б схожу на правду цифру?

Всі ці міркування з приводу споживаної пам'яті в S60 3rd розбиваються об скелю, зведену розробниками Symbian 9. Тут неможливо дізнатися розмір споживаної пам'яті ні точно, ні приблизно, ні взагалі хоч якось. Єдине, на що стає придатна утиліта визначення пам'яті в менеджері завдань - обчислити, скільки займає в ОЗУ сам менеджер завдань. Наприклад, про згаданий вище X-Plore можна дізнатися, що його виконуваний файл орієнтовно займає в пам'яті 3,5 Кб - судіть самі, наскільки корисна вам ця цифра. Ми пишемо "орієнтовно" тому, що враховується лише перший запущений модуль програми. Але ж модулів у програми може бути кілька.

3. Повна інформація про пам'ять

У природі це зустрічається вкрай рідко. З прикладів програм - хіба що Unreal Device Manager.

Symbian s60 і uiq 3

І виглядає це все дуже скромно - такий собі незначний інструмент під незрозумілим навіть просунутому користувачеві назвою - Chunks (можна перевести як як «Блоки»).

Сенс такої: якщо в Symbian потрібно десь виділити пам'ять під програму - для цього виділяється блок пам'яті, який має унікальне ім'я. Якщо знайти всі блоки в системі і показати їх ім'я і розмір - вийде повна схема розподілу пам'яті.

Побачити все це справа можна і в моїй програмі, натиснувши в головному вікні ABC + #. Дійсно, моторошно виглядає. В-общем, некрасиво воно і незрозуміло, пересічному користувачеві навряд чи потрібно, а тому практично ніде не реалізовано. Так, і головне: під Symbian 9 знайти всі блоки пам'яті можна, а дізнатися їх розміри - не можна. Так що користувачі S60 3rd, на відміну від S60 1st і 2nd, не мають взагалі ніякої можливості напевно дізнатися розмір споживаної додатками ОЗУ.

Оперативна пам'ять і багатозадачність

При нестачі оперативної пам'яті ОС починає вивантаження програм. Пріоритет наступний:

1. Додаток, з яким працює користувач (ще називається «Додаток в фокусі»).

2. Додатки з атрибутом «системне».

3. Додаток, запущене останнім.

4. Всі інші додатки.

Вивантаження починається з додатків 4 пункту - і, якщо пам'яті як і раніше не вистачає, вгору за списком.

Диск в оперативній пам'яті

Диск D: в системі - це диск в оперативній пам'яті (RAM-Drive). Працює він набагато швидше, ніж всі інші диски, має ті ж властивості, що й інші дискові накопичувачі.

стиснення пам'яті

Припустимо, програмі потрібно виділити для якихось своїх даних 200 Кб пам'яті. Програма їх виділила, а потім, коли ці дані стали непотрібними, - очистила. Потім вся ця операція повторилася.

Якщо поспостерігати за змінами розміру пам'яті, споживаної програмою, побачимо:

1. Після виділення 200 Кб - обсяг пам'яті виріс на 200 Кб.

2. Після очищення - нічого не змінилося. Як ніби нічого й не очистилося.

3. Після повторного виділення пам'яті - розмір не було збільшено. Після очищення - не зменшився.

Тепер припустимо, що програма виконує якусь іншу операцію, для якої потрібно виділити 100 Кб. Знову ж таки, виділили, очистили - розмір все той же. Що відбувається? Пам'ять на кшталт тече, а ніби й не тече.

Насправді, операційна система відмінно знає про порожні після очищення 200 Кб, але не поспішає їх додавати в доступну пам'ять. Зроблено це і заради швидкості, і заради енергозбереження. Змусити систему силою відібрати ці 200 Кб у програми і покласти їх в доступну пам'ять можна. Це і називається стисненням пам'яті (compress memory). Така функція є в багатьох менеджерів завдань.

В принципі, це косметика - поліпшуються лише цифри. Але є програми, які просто не запустяться, якщо доступної пам'яті менше, ніж потрібно. Ось для таких випадків корисно стиснути пам'ять. Добре це виконати, наприклад, після того, як закрили браузер, особливо Opera.

У читача могло скластися думка, що стискати пам'ять шкідливо, раз від цього збільшується енергоспоживання і знижується швидкість. Якщо будете час від часу стискати пам'ять вручну - шкоди від цього не буде. І, напевно, якщо це буде робити якась програма кожні 5 секунд - теж. Але якщо так буде робити система при кожній операції з пам'яттю - погано.

До речі, для стиснення пам'яті існує одна-єдина функція, тому неможливо таке, що одна програма стискає краще, а інша гірше. Використовуйте будь-яку програму з функцією стиснення - ефект буде один і той же.