HEAP ? oque é isso?

Pessoal, em livros e explicações sempre ouço falar em Heap, é algo a ver como que o Java trabalha com a memoria do computador, alguem tem explicações melhores a respeito, como comportamentos e tal ???

esse heap é um bloco de memoria que a JVM usa, onde todos os objetos criados são colocados lá…, e um dia o garbage collector vai ir lá e limpar os objetos que não estão mais sendo utilizados…

vc ta estudando forte hein? :slight_smile:

É, tô jogando duro e recuperando o tempo perdido, mas queria uma definição mais detalhada, ai vc explicou como o garbage collector funciona quando não se usa mais algum trecho de memoria, porém gostaria de mais explicações em torno de referências e talz, algumas particularidades, sacou ??? as vezes penso que uma determinada variavel vale uma coisa e vale outra, coisas deste tipo, claro que não é só isso ! :shock:

vai com calma :slight_smile:

este post que rolou semana passada é interessante…
http://www.guj.com.br/posts/list/19483.java

tipo, olha este código:

  1. String s = “Ricardo”;
  2. s = “GUJ”;

e agora o que aconceu com a string “Ricardo”?.. a variavel s agora aponta para um outro local de memoria…e a string “ricardo” se perdeu… ai o garbage collector vai la e faz o trabalho para a gente :smiley:

aff… agora fiquei na duvida tb…

nesse exemplo que eu dei… o s=“Ricardo” vai pro heap ou pra pilha?

s=new String(“ricardo”) vai para o heap…

e s=“Ricardo”?

interessante sua explicação, já tô de olho no tópico que vc citou !

Obrigado !

[quote=ricardolecheta]aff… agora fiquei na duvida tb…

nesse exemplo que eu dei… o s=“Ricardo” vai pro heap ou pra pilha?

s=new String(“ricardo”) vai para o heap…

e s=“Ricardo”?[/quote]

heap
sempre
apesar de que o JIT pode perceber e colocar objetos na pilha, mas vc nao precisa considerar isso.

eita, agora confundiu minha cabeça novamente, você pode explicar mais claramente como isso funciona, sem abreviações se puder.

:oops:

Antes de mais nada, se faz necessário lembrar q uma variável é um nome associado a uma posição(endereço hexadecimal) de memória.Na sua declaração,o compilador “arranja”(aloca) um espaço para ela.Como isso ocorre?Simples.A VM define várias áreas de execução de dados que são utilizadas durante a execução de um programa(algumas criadas no start-up da vm e destruídas quando ela termina seu trabalho,outras existentes durante o ciclo de vida de uma thread),mas devemos considerar 2 áreas cruciais para a alocação e execução de dados na sua memória principal(RAM) que são utilizadas pela Java Virtual Machine(JVM)durante a execução de um programa: a Stack e o Heap.Veremos elas e as demais áreas de dados em execução:
A Stack(“Pilha”)é uma área com suporte direto ao processador,através de seu apontador de
pilha(stack pointer-sp).Ele empilha( faz um"push") para criar nova memória,e desempilha(“pop”) para liberar aquela memória;ou seja,cabe ao sp guardar o endereço do próximo endereço vago na Stack (o topo da Stack).A Stack é uma forma extremamente rápida para alocar espaço,perdendo apenas para registradores(que são localizados dentro dos processadores),mas o programador não tem qualquer controle ou evidência de que seu programa fará uso deles.O compilador sabe(durante a criação do .class)o tamanho e o tempo de vida de cada dado que será armazenado na stack,porque através desse conhecimento é que será gerado o código para movimentar o sp(comforme aloca ou desaloca espaço na memória).O limite da pilha(por default o tamanho da stack é 220KBytes na VM da Sun em máquinas usando Windows)restringe muito o que pode ser armazenado nela.Em geral,armazena variáveis locais,chamadas a métodos com seus parâmetros,variáveis temporárias para algum cálculo e referências a objetos(não os objetos em si,que ficam na heap).
A heap(“monte”) é um local da memória que armazena todos os objetos que serão utilizados no seu programa(por isso é conhecido também como pool de memória).Quando um objeto é instanciado(geralmente através do operador new),esses objetos criados e seus respectivos parametros são automaticamente alocados na Heap(através de seu construtor).Quando um método que utiliza o objeto é finalizado,uma exceção ocorre,ou o número de referências ao objeto cai a zero,ou threads que utilizam o mesmo morrem(são finalizadas);ele-o objeto- fica passível de ser coletado pelo Garbage Collector,apesar de não sabermos quando isso ocorrerá(ficará a cargo da MáquinaVirtual).
Deu para sacar um pouco?

1 curtida

depois deste mini-tutorial do Ironlynx acho que ficou claro ne? :slight_smile:

Cara, essa foi a EXPLICAÇÃO, muito obrigado aos dois ai, agora deu pra ter uma ideia muito boa !

:smiley:

Ricardo, para dizer a verdade isso é parte de um tutorial(sobre passagens de parâmetro em Java e areas de mem) q fiz há muuito tempo para o guj…infelizmente o daniel perdeu a parte formatada, e eu ainda não tive saco de formatar a “parte bruta” que tenho aqui…

Cara, você naum poderia me passar esse tutorial não, eu agradeceria muito, poste do jeito que esta mesmo, no final de tudo eu assimilando já esta legal !

:lol:

alpha, se eu achar os códigos exemplos q fiz posto aqui(só tô com o texto!),senão vc não entenderá quase nada do que eu escrevi!

ok, valeu pela força mesmo assim !