Certificação: Pilha e Heap  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
JohnJohn
Debugger
[Avatar]

Membro desde: 17/10/2006 18:32:40
Mensagens: 59
Offline

Estou com algumas dúvidas do livro da Kathy ...
Certificação: Pilha e Heap

Na página 102 fala que ...
- As variáveis de instâncias e os objetos residem no HEAP
- As variáveis locais residem na PILHA

Já na página 122 fala que ...
Em Java, os arrays são objetos ... o array propriamente dito sempre será um objeto da pilha ...

Na página 123 fala que ...
Construir um array significa criar o objeto de array na pilha (onde todos os objetos residem) ...

Em todos os desenhos como exemplo, o livro descreve os arrays no Heap ...
Afinal, o que fica no HEAP??? E o que fica na PILHA???
Pois agora já não sei mais de nada ....

eu sempre desejei mudar o mundo, mas nunca me deram o código fonte ...
hoje tenho em minhas mãos: Bíblia!!!
ramilani12
GUJ Master
[Avatar]

Membro desde: 11/03/2005 01:23:30
Mensagens: 1944
Localização: Curitiba-PR
Offline

A grande diferença que os objetos residem na HEAP e tipos primitvos int , float , char e etc residem na Pilha (Stack)

my delicious|follow me|linkedin
[Email] [ICQ]
JohnJohn
Debugger
[Avatar]

Membro desde: 17/10/2006 18:32:40
Mensagens: 59
Offline

ramilani12,
muito obrigado por sua atenção ...
mas ainda tenho uma dúvida: e os arrays onde residem???

eu sempre desejei mudar o mundo, mas nunca me deram o código fonte ...
hoje tenho em minhas mãos: Bíblia!!!
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

ramilani12 wrote:A grande diferença que os objetos residem na HEAP e tipos primitvos int , float , char e etc residem na Pilha (Stack)


Na verdade o que reside no heap são as varíaveis de instância sendo ela primitiva ou não...

e na pilha ficam as varíaveis locais...ou seja : varíaveis de métodos, por exemplo.


Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
ramilani12
GUJ Master
[Avatar]

Membro desde: 11/03/2005 01:23:30
Mensagens: 1944
Localização: Curitiba-PR
Offline

Giulliano wrote:
ramilani12 wrote:A grande diferença que os objetos residem na HEAP e tipos primitvos int , float , char e etc residem na Pilha (Stack)


Na verdade o que reside no heap são as varíaveis de instância sendo ela primitiva ou não...

e na pilha ficam as varíaveis locais...ou seja : varíaveis de métodos, por exemplo.





Não é o contrário ?
Veja esse link Thinking in Java
http://www.hwn.com.br/pej/tij2pej/PEJ303.htm
Na seção: Criação de objetos, uso e tempo de vida

my delicious|follow me|linkedin
[Email] [ICQ]
fec
JavaChild
[Avatar]

Membro desde: 04/04/2007 14:34:25
Mensagens: 100
Offline

Amigo a tradução está errada:
Dá uma olhada:
Constructing an array means creating the array object on the heap (where all objects
live)


Espero que tenha tirado sua duvida agora!!

"Qualquer coisa é a mesma coisa"
ramilani12
GUJ Master
[Avatar]

Membro desde: 11/03/2005 01:23:30
Mensagens: 1944
Localização: Curitiba-PR
Offline

JohnJohn wrote:ramilani12,
muito obrigado por sua atenção ...
mas ainda tenho uma dúvida: e os arrays onde residem???



Se vc criar um Array de Tipos primitivos ele ficara na pilha mas como objeto de referencia , não tenho muita certeza disso estou me basendo nesse artigo escrito pelo Dejan Jelovic que ele compara a performance de um programa Java e C++



Dejan Jelovic wrote:
1. All Objects are Allocated on the Heap
Java only allocates primitive data types like int and double and object references on the stack. All objects are allocated on the heap.


Fonte: http://www.jelovic.com/articles/why_java_is_slow.htm

my delicious|follow me|linkedin
[Email] [ICQ]
fec
JavaChild
[Avatar]

Membro desde: 04/04/2007 14:34:25
Mensagens: 100
Offline

ramilani12 wrote:
Se vc criar um Array de Tipos primitivos ele ficara na pilha mas como objeto de referencia , não tenho muita certeza disso estou me basendo nesse artigo escrito pelo Dejan Jelovic que ele compara a performance de um programa Java e C++



Mesmo assim arrays serão criados no heap.
Mesmo se for arrays de primitivos continuará sendo um objeto, pois não existe um array primitivo.

Valew!

"Qualquer coisa é a mesma coisa"
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

olha para entender isso: você poe assim, todas minhas variaveis locais ou seja declarda dentro de um método ou de um bloco, ela pertence a uma pilha, que pilha é essa? uma pilha de chamadas.. que apos a conclusão de cada chamada, essas variaveis sao destruidas. exemplo:



vamos observar o codigo agora, você tem essa pilha: main-->massa-->pizza. certo? um metodo chamado o outro.. qdo pizza concluir sua tarefa, ele volta para o metodo chamador quem é? massa, ai ele conclui a sua tarefa e volta para quem? Main e a variavel de massa é local ne? entao ela foi destruida apos o metodo ter concluido e agora o metodo está em main que terminou sua execucao e seu programa parou de rodar.. simples ne? então por isso que é uma variavel de pilha, pois ela está em uma pilha de chamadas.

E heap? heap é um local aonde está as variaveis de instancia? mais para vc saber o que é heap tem q se lembrar que variaveis de instancia pertence a um objeto, entao no heap eu posso ter varios objetos que referencia aquela variavel de instancia porem com valores distintos. Todo e qualquer objeto que vc dar new ele vai para o heap.. lembre-se que em array vc dar new.. entao ele é um objeto apesar de vc fazer isso ele nao é um tipo primitivo.. ele armazena elementos de tipos primitivos... mais no fundo é um objeto...

Para o exame você souber diferenciar a existencia de uma variavel local e uma variavel de instancia tá de bom tamanho.. a parte teórica nao cai.. mais vc precisa saber para identificar os erros de compilação q tem muita questao desse tipo que nem compila. Ex.: Acessar uma variavel local, fora do seu escopo..

espero ter ajudado...

P.S.: O GUJ ta legal no novo layout e funcionalidades.. Parabéns! aos responsáveis

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
JohnJohn
Debugger
[Avatar]

Membro desde: 17/10/2006 18:32:40
Mensagens: 59
Offline

fec wrote:Amigo a tradução está errada:
Dá uma olhada:
Constructing an array means creating the array object on the heap (where all objects
live)


Espero que tenha tirado sua duvida agora!!


Cara, creio que essa resposta é a mais cabível ...
Boa sorte ao seu Fortaleza ... eheheheh (São Paulo rumo ao penta)
Muito obrigado!!!

eu sempre desejei mudar o mundo, mas nunca me deram o código fonte ...
hoje tenho em minhas mãos: Bíblia!!!
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

Resumindo,

Heap: qualquer variável de instância (seja primitiva ou objeto) e qualquer Objeto (inclusive array, de primitivo ou não, pois qualquer array é um Object) declarado em qualquer ponto do programa.
Pilha: variáveis locais ou "de método" e valores de tipos primitivos. Note qu são apenas as variáveis que ficam na pilha e não os objetos.

Ex.:



[]'s

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team