Alocar uma posição não quer dizer que essa posição fique fixa…
Na verdade, apenas para facilitar a implementação, no caso específico da Sun JVM, apenas a memória ocupada pelo código nativo compilado tem de ficar fixa. Como esse código é relativamente pequeno comparado com a quantidade de memória usada pelas aplicações Java típicas, a Sun optou por deixar essa área de memória sem poder ser movimentada livremente por algum “garbage collector”.
Não sei quem é esse Flávio Varejão, mas de qualquer maneira você sabe que é importante você simplificar os conceitos se você pretende ser didático (que é o caso do livro, oras!)
A liberação da memória de uma variável estática, por exemplo, pode ocorrer antes do final da execução de um programa, se por acaso:
- A variável referenciar um objeto que não está sendo referenciado por mais nenhuma outra variável ou objeto no seu programa, e
- A classe que define a variável estática for ela mesma descarregada da memória (isso é possível, principalmente se ela for carregada por um classloader que não é o padrão.)
Portanto, a realidade pode ser mais complicada que parece. Aconselho a estudar outras coisas que não somente seu livro.