Очень быстро, легко увидеть (прямо в корне, присваивать нулевые значения) и массовые выпуски могут заставить GC стать нетерпеливым, и сама идея локальной кешированной кучи - хорошая мечта :-) Даже если у вас был полностью разделенный поток-локальные кучи (а вы этого не делаете) таблица указателей дескрипторов все равно должна быть полностью изменчивой, чтобы сделать ее безопасной для общих сценариев с несколькими ЦП.Да, и помните, что потоков много, кэш-память центрального процессора используется совместно, ядро должно иметь приоритет, поэтому это не только для вас :-)
Также следует помнить, что «куча» с двойными указателями состоит из 2 частей - блокапамять и таблица указателей (чтобы можно было перемещать блоки, но ваш код всегда имеет один адрес).Такая таблица является критически важным, но очень экономичным ресурсом на уровне процесса, и почти единственный способ подчеркнуть это - заполнить ее большими быстрыми выпусками - так что вам удалось это сделать: -))
В целом правилоGC - утечка :-) Не навсегда, конечно, но вроде как можно дольше.Если вы помните, как люди ходят, говоря "не принуждайте коллекции GC"?Это часть истории.Кроме того, коллекция «останови мир» на самом деле гораздо более эффективна, чем «параллельная», и раньше ее называли более удачным названием «кража циклов» или «сотрудничество шедулеров».Только фаза метки должна заморозить планировщик, и на сервере это происходит из нескольких потоков (все равно N ядер простаивают :-) Единственная причина для другого состоит в том, что он может выполнять операции в реальном времени, такие как воспроизведение видео, нервноточно так же, как это делает более длинный квант потока.
И снова, если вы конкурируете с инфраструктурой на коротких и частых пакетах ЦП (малое распределение, почти не работает, быстрый выпуск), единственное, что вы увидите / измерите, будетбыть шумом GC и JIT.
Если бы это было что-то реальное, то есть не просто эксперименты, лучшее, что вы можете сделать, это использовать массивы больших значений в стеке (структуры).Они не могут быть принудительно загружены в кучу и являются настолько локальными, насколько могут получить локальные, и не подвержены никакому бэкдор-движению => кеш должен их любить :-) Это может означать переключение в «небезопасный» режим с использованием обычных указателей и, возможно,делать немного ассигнования самостоятельно (если вам нужно что-то простое, например, списки), но это небольшая цена за то, чтобы выкинуть GC :-) Попытка принудительно поместить данные в кеш также зависит от сохранения стеков в другом случае - помните, что выне одиноки.Также может помочь вашим потокам некоторая работа, которая стоит как минимум несколько квантов между выпусками.Наихудший сценарий будет, если вы выделите и освободите в пределах кванта сигнала.