Среда времени исполнения (Runtime)
Новый пакет runtime/metrics представляет стабильный интерфейс для чтения метрик, определенных реализацией, из среды выполнения Go. Он заменяет существующие функции, такие как runtime.ReadMemStats и debug.GCStats, и является значительно более общим и эффективным.
Установка для переменной среды GODEBUG значения inittrace=1 теперь заставляет среду выполнения выдавать одну строку стандартной ошибки для каждого пакета init, суммируя время выполнения и выделение памяти. Эта трассировка может использоваться для поиска узких мест или снижения производительности Go при запуске. Документация GODEBUG описывает формат.
В Linux среда выполнения теперь по умолчанию немедленно освобождает память операционной системе (с использованием MADV_DONTNEED), а не лениво, когда операционная система испытывает нехватку памяти (с помощью MADV_FREE). Это означает, что статистика памяти на уровне процесса, такая как RSS, будет более точно отражать объем физической памяти, используемой процессами Go. Системам, которые в настоящее время используют GODEBUG=madvdontneed=1 для улучшения поведения мониторинга памяти, больше не нужно устанавливать эту переменную среды.
В Go 1.16 исправлено несоответствие между детектором гонки и моделью памяти Go. Детектор гонки теперь более точно следует правилам синхронизации каналов модели памяти. В результате теперь детектор может сообщать о ранее пропущенных гонках.
Компилятор
Компилятор теперь может встраивать функции с немаркированными циклами for, значениями методов и переключателями типов. Инлайнер также может обнаруживать больше косвенных вызовов, когда встраивание возможно.
Компоновщик (Linker)
Этот релиз включает в себя дополнительные улучшения компоновщика Go, снижающие использование ресурсов компоновщика (как времени, так и памяти) и повышающие надежность и удобство сопровождения кода. Эти изменения образуют вторую половину проекта с двумя релизами по модернизации компоновщика Go.
Изменения компоновщика в 1.16 распространяют улучшения 1.15 на все поддерживаемые комбинации архитектуры/ОС (улучшения производительности 1.15 были в основном сосредоточены на ОС на основе ELF и архитектурах amd64). Для репрезентативного набора больших программ Go компоновка на 20-25% быстрее, чем 1.15, и требует в среднем на 5-15% меньше памяти для linux/amd64 с большими улучшениями для других архитектур и ОС. Большинство двоичных файлов также меньше в результате более агрессивной обрезки символов.
В Windows go build -buildmode=c-shared теперь по умолчанию генерирует Windows ASLR DLL. ASLR можно отключить с помощью --ldflags=-aslr=false.
Читайте также:
- Релиз Go 1.15, порты, инструменты
- Релиз Go 1.15, runtime, компилятор, компоновщик
- Релиз Go 1.15, основная библиотека
- Релиз Go 1.16, порты, инструменты
Комментариев нет:
Отправить комментарий