Quão ineficiente está passando o Collections.unmodifiable *, uma instância que já está empacotada com o Collections.unmodifiable *?

Eu tenho pedaços de peças sendo feitas por diferentes estruturas personalizadas (código fonte indisponível) que devolvem instâncias de mapa. Infelizmente, essas estruturas não são consistentes nas instâncias de mapa retornadas que foram agrupadas com Collections.unmodifiableMap. Para garantir um maior grau de imutabilidade (para facilitar o uso de vários threads) no meu código, chamei apenas uniformemente Collections.unmodifiableMap em qualquer coisa retornada por essas estruturas.

Map<String, Record> immutableMap = framework.getRecordsByName();
//does this created a nested set of unmodifiableMap wrapper instances?
this.immutableField = Collections.unmodifiableMap(immutableMap);
.
.
.
Map<String, Record> maybeImmutableMap = framework.getRecordsByName();
//is there some means to get instanceof to work?
if (!(maybeImmutableMap instanceof Collections.UnmodifiableMap))
{
    this.immutableField = Collections.unmodifiableMap(maybeImmutableMap);
}

Percebi que poderia ter um problema de desempenho nessa parte do meu design. E que, em alguns casos, eu estava chamando Collections.unmodifiableMap, passando uma instância que já havia sido encapsulada pela estrutura pela mesma chamada. E que meu novo envolvimento provavelmente estava causando uma chamada de método extra em toda a instância.

Parece que o uso de "instanceof Collections.UnmodifiableMap" não funciona. E não consigo encontrar nenhuma maneira de detectar (excluindo o uso de reflexão que não é uma opção nessa situação - MUITO LENTA) se a instância do Mapa que estou referenciando precisa ser quebrada ou não.

Questões:

A) O método Collections.unmodifiableMap () verifica se foi aprovada uma instância de UnmodifiableMap e, em caso afirmativo, apenas retorna a mesma referência (evitando assim a necessidade de verificar antes de chamar o método)?B) Para evitar proativamente receber exceções de modificação, existe uma maneira de consultar uma instância de Map (que não seja a reflexão) para detectar se é mutável (ou imutável)?C) Se a resposta para A for não, então existem algumas eficiências na JVM / HotSpot que eliminam a sobrecarga de chamada através de vários saltos de método para chegar à instância principal?

questionAnswers(6)

yourAnswerToTheQuestion