Dúvida sobre Alocação de Memória

Quando alguem diz isso, como no exemplo:

[quote]Antes da referência ao objeto ser usada, este precisa ser alocado na memória o que é feito através de umcirc=new Circulo();. Se você tivesse declarado um objeto da classe String, já definida na linguagem, e depois fizesse sua alocação, o código seria semelhante ao seguinte:
String umastring;
umastring=new String(“Valor inicial”);
[/quote]

[color=“blue”] Isso quer dizer que ele vai ficar ocupando recursos da máquina? Ai eu fiquei na dúvida se tem alguma coisa haver, como quando alguem diz “o programa é pesado”. [/color]

[color=“blue”]Eu sei que a resposta deve ser sim, mas como to no começo acho que não custa tirar a dúvida. [/color]

Obviamente que vai usar recursos da sua máquina. Afinal, é para isso que ela serve :smiley: . Toda vez que você faz um MeuObjeto obj = new Meu Objeto(); você aloca uma quantidade X de bytes da sua memória para poder acomodar seu objeto. Mas isso não acontece apenas com objeto, mas sim com todo tipo de dados, inclusive os tipos de dados primitivos, como int, double, float, boolean, byte, long, short, char (será que eu esqueci algum?). Mas, então, qual a diferença entre alocar memória para tipos primitivos e para objetos? A diferença é que a alocação de memória para tipos primitivos é feita sequencialmente, ou seja, o bloco de memória que uma certa variável primitiva vai ocupar é contínuo, enquanto a alocação de objetos não é necessariamente sequencial.

That’s all folks

Valeu, deu pra tirar a dúvida, só que eu ainda me complico um pouco com esse esquema de Objetos, declarar bytes, char etc…etc.
Isso é normal no começo?

Se você nunca programou antes na sua vida (ou se você programava em VB/ASP sem o famoso “Option Explicit”) isso é normal. Caso contrário…

Estou com uma dúvida neste assunto agora…

Se eu declaro um vetor e encho ele com uns 30 MBytes de informação, bastará eu dar um meuVetor = null; ou preciso chamar explicitamente o garbage collector?

Ou existe um destrutor para isso?

:slight_smile:

O garbage collector vai estar sempre atento a esse tipo de liberacao de memoria, e chamar o System.gc() pode ajudar, as vezes. Ou seja, eh um comportamento completamente fora do controle do desenvolvedor. Nao tem destrutores, tambem - o mais proximo disso eh o metodo finalize(), mas o uso dele eh bem especifico (liberar recursos extremamente caros que possam ter sido alocados por uma classe e nao foram liberados pelo desenvolvedor, evitando uma catastrofe, por exemplo :))

Rapaz, eu não sei direito, vou falar aqui ae se eu estiver errado alguém me correge( oh português bem dizido ).

Quando vc declara um Objeto, um lugar na memória é armazenado para aquele objeto, apontando para o NADA, VAZIO, null.

Ele fica assim até que vc dê um new ou use um literal para inicilizar String ou array.

Então, sim, vai ficar usando memória enquanto o Objeto não for inicializado.