É por isso que não funciona. Não basta você liberar a sua referência com = null para que o singleton libere a dele.
Ou a classe do mozilla te dá um método para fazer isso explicitamente, coisa que eu duvido muito que exista senão há uma grande chance de furar o conceito do singleton, ou, o mais provavel, você nunca vai conseguir isso.
Só justificando a afirmação acima:
-
o conceito de singleton é que você somente tem uma instancia de algo no sistema e todas as variaveis que referenciam essa instancia sempre apontam para o mesmo objeto.
-
Essa classe deve fornecer um metodo .getInstance() que cria uma instancia nova e unica (caso precise), devolvendo-a. Até aqui nada diferente de um Singleton.
-
Agora imagine que essa classe possua um outro método chamado destroyInstance() que faz com que o singleton altere a variavel static para null.
Compile todas essas informações e pense no seguinte código:
PseudoSingleton s1 = PseudoSingleton.getInstance(); // retorna a instancia #1
PseudoSingleton s2 = PseudoSingleton.getInstance(); // retorna também a instancia #1
//Vamos agora "limpar" o singleton
PseudoSingleton.destroyInstance();
//E vamos criar um outro objeto com uma instancia do singleton
PseudoSingleton s3 = PseudoSingleton.getInstance(); // retorna a instancia #2
if (s1 != s3) {
//ops! não é um singleton de verdade!
}
Entendeu?
De qualquer maneira, leia o código fonte dessa classe.
Provavelmente você se deparará com uma variavel static que uma vez inicializada não é mais liberada.
Aproveite também para estudar um pouco o pattern singleton, ou seria anti-pattern?