É má prática para atribuir uma nova matriz para uma matriz existente para 'limpar' a matriz em Java?

Yuxie:

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).

Bohemian:

É 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);

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=175879&siteId=1
Recomendado
Clasificación