Считайте максимальное пространство "кучи" во времени выполнения

Нет, нет constexepr условного оператора. Но вы можете обернуть все это в лямбду и сразу же оценить ее ( IIFE ):

template
class BusAddress {
public:
    explicit constexpr BusAddress(Address device)
     : mAddress([&]{
          if constexpr (Mode::write) {
            return device.mDevice << 1;
          }
          else {
            return (device.mDevice << 1) | 0x01;
          }         
        }())
     { }
private:
    uint8_t mAddress = 0;    
};

Возможно, это не самый сексуальный код, но он выполняет свою работу. Обратите внимание, что лямбды по умолчанию constexpr, где это возможно, начиная с N4487 и P0170 .

16
задан Gray 19 July 2012 в 21:31
поделиться

1 ответ

Существует Runtime.maxMemory , который, как сказано в документации, возвращает максимальный объем памяти, который виртуальная машина Java попытается использовать, но не указано, является ли это максимальная куча. памяти, установленной при запуске JVM.

В качестве теста я написал следующую программу:

class MaxMemory {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().maxMemory());
    }
}

Результаты выполнения были следующими:

C:\coobird\>java -Xmx64m MaxMemory
66650112

C:\coobird\>java -Xmx128m MaxMemory
133234688

Это используется Java SE 6 версии 1.6.0_12 в Windows.

Хотя значения близки к 64 МБ (67 108 864 байта) и 128 МБ (134 217 728 байтов), это не совсем так.

24
ответ дан 30 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: