HEAP ? oque é isso?

14 respostas
V

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 ???

14 Respostas

R

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:

V

É, 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:

R

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:

R

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”?

V

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

Obrigado !

P

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”?

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

V

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

:oops:

I

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?

R

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

V

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

:smiley:

I

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…

V

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:

I

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!

V

ok, valeu pela força mesmo assim !

Criado 24 de janeiro de 2005
Ultima resposta 26 de jan. de 2005
Respostas 14
Participantes 4