MemoryConsoleCommand.java

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Реализация спецификаций CLDC версии 1.1 (JSR-139), MIDP версии 2.1 (JSR-118)
    и других спецификаций для функционирования компактных приложений на языке
    Java (мидлетов) в среде программного обеспечения Малик Эмулятор.

    Copyright © 2016–2017, 2019–2023 Малик Разработчик

    Это свободная программа: вы можете перераспространять ее и/или изменять
    ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
    в каком она была опубликована Фондом свободного программного обеспечения;
    либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.

    Эта программа распространяется в надежде, что она будет полезной,
    но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
    или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
    общественной лицензии GNU.

    Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
    вместе с этой программой. Если это не так, см.
    <https://www.gnu.org/licenses/>.
*/

package malik.emulator.microedition.system.console;

import malik.emulator.microedition.system.*;
import malik.emulator.util.*;

public class MemoryConsoleCommand extends ConsoleCommand
{
    private static final long KB = 1L << 10;
    private static final long MB = 1L << 20;
    private static final long GB = 1L << 30;
    private static final long TB = 1L << 40;
    private static final long PB = 1L << 50;
    private static final long EB = 1L << 60;

    private static String dataSizeToString(long size) {
        if(size >= 0 && size < KB) return Integer.toString((int) (size)).concat(" байт");
        if(size >= KB && size < MB) return Integer.toString((int) (size >> 10)).concat(" КБ");
        if(size >= MB && size < GB) return Integer.toString((int) (size >> 20)).concat(" МБ");
        if(size >= GB && size < TB) return Integer.toString((int) (size >> 30)).concat(" ГБ");
        if(size >= TB && size < PB) return Integer.toString((int) (size >> 40)).concat(" ТБ");
        if(size >= PB && size < EB) return Integer.toString((int) (size >> 50)).concat(" ПБ");
        return Integer.toString((int) (size >>> 60)).concat(" ЭБ");
    }

    public MemoryConsoleCommand() {
        super(
            "память",
            "Использование:\n память\n память точно\nВыводит на консоль текущее состояние памяти."
        );
    }

    protected void execute(String[] arguments, Console console) {
        StringBuilder text = new StringBuilder();
        if(arguments.length > 0 && "точно".equals(arguments[0]))
        {
            text.
                append("Свободно: ").append(Memory.getFree()).
                append(" байт\nОсвобождено: ").append(Memory.getCollected()).
                append(" байт\nВсего: ").append(Memory.getTotal()).append(" байт")
            ;
        } else
        {
            text.
                append("Свободно: ").append(dataSizeToString(Memory.getFree())).
                append("\nОсвобождено: ").append(dataSizeToString(Memory.getCollected())).
                append("\nВсего: ").append(dataSizeToString(Memory.getTotal()))
            ;
        }
        console.println(text.toString());
    }
}