Проблема: Как принудительно перезаписать системную память в Java - Более конкретно: Когда защищенные ключи не должны оставаться в памяти более нескольких секунд: ни в jvm-память, ни в OS-Memory?
Что я пробовал: Модификация реализации java сборщика мусора, чтобы она наверняка перезаписывала объекты случайными байтами, а не просто освобождала их,Однако:
Все, что я прочитал о System.gc()
, показало мне, что я никогда не могу действительно полагаться на это, и что не следует использовать это в производстве.Однако что, если я знаю, что использую определенную JVM?Что если я знаю, что хочу использовать OpenJDK с Java 11 и что я настраиваю JVM для использования конкретной реализации GC (чтобы не позволить JVM выбрать GC)?
Вопрос 1: Могу ли я тогда каким-то образом быть уверен, что System.gc()
вызовет сборку мусора 100% раз?
Вопрос 2: Могу ли я узнать, какова максимальная продолжительность между System.gc()
был вызван и начнется фактическая сборка мусора?Это важная часть вопроса!Я мог только найти ответы на саму эффективность сборки мусора (например, пропускная способность по сравнению с временами пауз остановки), но это НЕ ответ на этот вопрос.(Прочитайте всю документацию здесь )
Вопрос 3: Если идея с модифицированным сборщиком мусора, безусловно, является наихудшей идеей надежной перезаписи каждого случаяразличные разумные объекты Java в памяти, тогда как я мог бы перезаписать эти объекты в памяти?Это вообще возможно с Java?Было бы неплохо иметь возможность удалять и перезаписывать эти объекты непосредственно в Java-коде, подобно освобождению объектов в C / C ++?Есть ли другие возможности, кроме как в Java, где я могу перезаписывать каждое появление такой чувствительной информации в памяти, которая должна быть запущена как можно быстрее, как только объект Java больше не используется?
Мои исследования до сих пор:
Как вы можете видеть, они, за исключением официальных документов, довольно старые, поэтому:
Вопрос 4: Есть ли какие-либо более новые идеи, доступные для беспокойства, ведет ли себя System.gc()
так же, как10 лет назад??Спасибо!
* РЕДАКТИРОВАТЬ: Я уже использую байтовые массивы для случаев, когда они могут быть использованы.Речь идет о более сложных Java-объектах с различными полями и свойствами, которые необходимо полностью очистить в памяти.