felixcomputer:
Pessoal, tenho duas perguntas, gostaria de saber se existe alguma forma de eu ver quanto de memória os meus objetos estão alocando em uma aplicação, é possível?
A segunda é sobre String, fiquei sabendo que ela é uma classe final, ou seja, eu só posso atribuir um valor pra ela apenas uma vez, certo? No caso, se eu atribuir duas vezes, ele apenas cria uma novo objeto e muda a referencia, mas eu gostaria de desalocar um objeto meu, no caso eu pensei em fazer isso
String um = "um";
um = null;
Eu queria fazer isso para depois chamar o garbage collector e então retira-la da memória, contudo levando em consideração aquilo que eu falei no começo sobre só poder atribuir uma vez, no caso se eu fizer isso, ele vai desalocar quando o gc() for chamado ou ele apenas vai mudar a referencia para nulo e o objeto String continuar existindo?
Obrigado :roll:
A classe String é imutável, isso é, todos os seus métodos retornam ma nova String, sendo que a original permanece inalterada. Isso vale também para quando temos, por exemplo:
String s = "blablabla";
s = "blebleble";
No momento em que redefinimos s para “blebleble”, estamos criando uma nova String e associando uma cópia da referência para este novo objeto para s. O antigo objeto, que contém “blablabla” ainda está na memória, mas não há mais ninguém fazendo referência a ele. Assim, ele logo será coletado pelo GC.
Se vc faz como disse:
String um = "um";
um = null;
Quando faz um = null está tornando um elegível para garbage collection, porém não há garantia alguma de que ele será coletado neste momento, pode levar um tempo. Chamar System.gc() também não garante que a coleta de memória não utilizada ocorrerá instantâneamente, mas pode até ajudar…
Abraço!