java.lang.ShortCache.cache содержал неправильное значение

#java #jvm #short

#java #jvm #короткое

Вопрос:

Одно из моих приложений решило сегодня вернуть 1, когда

 Short.valueOf("0")
  

был вызван.
Я обнаружил, что

 ShortCache.cache[128]
  

было установлено значение 1 вместо 0, другие кэшированные значения были правильными.

Вот как инициализируется кэш:

 private static class ShortCache {
    private ShortCache(){}

    static final Short cache[] = new Short[-(-128)   127   1];

    static {
        for(int i = 0; i < cache.length; i  )
            cache[i] = new Short((short)(i - 128));
    }
}
  

Каковы возможные сценарии, чтобы это произошло?

Комментарии:

1. Это может произойти, если вредоносная библиотека или фрагмент кода (или коллега с неуместным чувством юмора) изменили кэш, например, см. Добавить энтропию в вашу JVM

2. Я видел это в видео youtube.com/watch?v=amXXYgu0eFY похоже, что что-то изменяет кеш.

3. @MarkRotteveel и Джон Мерсье: это действительно было бы неприятно. Однако, поскольку изображение, содержащее это приложение, запущено в нескольких средах, и до сих пор это происходило только один раз (и перезапуск исправил это), мне было интересно, мог ли какой-либо процесс, отличный от Java, внутри или вне контейнера, изменить значение, на которое ссылается данный Short .

4. Хотя это возможно, я думаю, что такое внешнее повреждение было бы еще менее вероятным.