Então, eu estou atualmente trabalhando em um programa que precisa ser capaz de lidar com uma grande quantidade de dados armazenados em matrizes e ele precisa de um método para limpar tudo na matriz. Para o exemplo abaixo, isso seria uma coisa ruim para fazer memória sábio? Eu sei que o coletor de lixo acabaria por limpá-lo para você, mas há uma razão para que um outro método (por exemplo, um loop e definir cada valor dentro de null) pode ser melhor do que isso?
Object[] objArray = new Object[n];
/*Do some stuff with objArray*/
objArray = new Object[n]
Caso contrário, fazendo isso irá permitir que esta operação seja executado em O (1) vs tempo para um ciclo que levaria O (n).
É uma prática ruim.
Em primeiro lugar, a atribuição de uma nova matriz para a variável na verdade não “claro” qualquer coisa fora (mais sobre isso abaixo).
Esta é a melhor prática:
objArray = null;
o que torna o inacessível matriz original e, por conseguinte, será (eventualmente) de lixo recolhido.
Ele também evita uma alocação desnecessária de memória criando o array vazio usado para substituir o antigo.
No entanto, nenhuma opção “limpa” para fora a matriz original, o que pode representar um, embora pequeno, exposição de segurança. Até lixo coletado, o conteúdo da matriz pode ser divinable se o conteúdo da memória são despejados etc.
O verdadeiramente limpar a matriz:
Arrays.fill(objArray, null);