Alocação de memória e vida das variáveis

Minha pergunta ou melhor, as perguntas são as seguintes:

1) Onde a variável estática reside? Alguns artigos dizem que eles residem no heap e alguns dizem na área perm gen com a definição de classe, pois são atributos de classe. Eu entendo que a segunda opção pode estar correta porque é um atributo de classe.
2) Onde reside a variável final e qual é a sua vida se: a) É uma variável de instância do tipo primitiva b) É uma variável local de um método do tipo primitiva c) É uma variável de instância do tipo referência b) É uma variável local variável de um método de referência de tipo
3) Onde estão as variáveis ​​locais de referência armazenadas se forem locais.
4) No caso de arrays, há alguma diferença na alocação de memória, uma vez que são variável de instância ou variável de thread local.


obrigado