Estrutura de dados em Java - Ponteiros e Alocação de Memória

8

Click here to load reader

Transcript of Estrutura de dados em Java - Ponteiros e Alocação de Memória

Page 1: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Estrutura de DadosPonteiros e Alocação Dinâmica de

MemóriaProf. Adriano Teixeira de Souza

Page 2: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Tipos de VariáveisAs variáveis de um programa, em geral, podem ter dois tipos de conteúdo:

• Valor: instâncias de um determinando tipo

• Referência: indica outra variável na memória

tipo: intvalor: 5

int contador = 5;

tipo: charvalor: ‘b’

char letra = ‘b’;tipo: doublevalor: 8.53

double nota = 8.53;

tipo: ref. p/ string

tipo: ref. p/ int[]texto

int notas[2]

valor: {8, 10}

valor: “abc”

Prof. Adriano Teixeira de Souza

Page 3: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Variáveis: ValoresAtribuir uma variável de valor a outra apenas copia seu conteúdo atual. Uma modificação em uma delas não afeta a outra variável.

Ponto p1, p2;...p1.x = 3;p1.y = 1;...p2.x = p1.x;

p2.y = p1.y;...p1.x = 5;

p1 3 1x y

p2x y

p1 5 1x y

p23 1x y

p1 3 1x y

p23 1x y

Prof. Adriano Teixeira de Souza

Page 4: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Variáveis: ReferênciasAtribuir uma referência faz com que ambas apontem para o mesmo objeto. Qualquer alteração afeta as duas variáveis.

Java:

Ponto p1, p2;...p1.x = 3;p1.y = 1;...p2 = p1;...p1.x = 5;

p1 3 1x y

p2 ...

x y

p1 3 1 p2

p1 5 1x y

p2

Prof. Adriano Teixeira de Souza

Page 5: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Referências em Java

Em Java, todos os tipos primitivos são representados por valores:

char c;int x, y;

c = ‘a’;x = y = 3;

s = “if672”;p = new Ponto(3,1);p.x = x;n = new Integer(3);v = null;

String s;Ponto p;Integer n;Vector v;

Os tipos compostos (classes), por outro lado, utilizam referências:

Prof. Adriano Teixeira de Souza

Page 6: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Alocação Dinâmica de Memória

A memória só é requisitada no momento em que o objeto é necessário, evitando o desperdício.

Em Java/C++: através do operador new

Java: Ponto p = new Ponto(800,600);

C++: Ponto *p = new Ponto(800,600);

Parâmetros do construtor

Prof. Adriano Teixeira de Souza

Page 7: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Alocação Dinâmica de Memória

a

int[5]

A memória é alocada para o novo objeto, e sua posição armazenada em uma referência (ponteiro):

Mem

ória

bint[] a;

int[] b;

...

a = new int[5];

b = new int[4];

...

a = b;

int[4]

Não há mais nenhum ponteiro para esta região. O que acontece com ela?

Prof. Adriano Teixeira de Souza

Page 8: Estrutura de dados em Java - Ponteiros e Alocação de Memória

Liberando Memória AlocadaEm C/C++, é preciso desalocar as variáveis antes de eliminar a última referência para ela.

Em Java, isso não é necessário, pois o garbage collector libera a memória automaticamente.

Prof. Adriano Teixeira de Souza