31
Garbage Collector Tomaz Lavieri Sun Certified Java Programmer 6 [email protected] http://java-i9se.blogspot.com.br Certifica Certifica ç ç ão Sun ão Sun ® ® para Programador para Programador Java Java TM TM 6 6

SCJP 6 - Garbage Collector

  • Upload
    lavieri

  • View
    2.677

  • Download
    4

Embed Size (px)

DESCRIPTION

Uma breve explicação de como resolver exercícios de Garbage Collector (Coletor de lixo) referentes a certificação Java SCJP 6.

Citation preview

Page 1: SCJP 6 - Garbage Collector

Garbage Collector

Tomaz LavieriSun Certified Java Programmer [email protected]://java-i9se.blogspot.com.br

CertificaCertificaçção Sunão Sun®® para Programador para Programador JavaJavaTMTM 66

Page 2: SCJP 6 - Garbage Collector

Garbage Collector

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

Page 3: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Page 4: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Compila ?

Page 5: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Como é possível verificar, o código não contém nenhum erro, e será compilado normalmente, portanto a letra “A” é falsa.

Page 6: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Page 7: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

O que será impresso ?

Page 8: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.G) Após a linha 9 existe 1 objeto elegível para o GCH) Após a linha 13 existe 1 objeto elegível para o GCI) Após a linha 13 existem 2 objetos elegíveis para o GCJ) Após a linha 14 existe 1 objeto elegível para o GCK) Após a linha 14 existem 2 objetos elegíveis para o GCL) Após a linha 14 existem 3 objetos elegíveis para o GCM) Após a linha 15 todos os objetos serão coletados pelo GCN) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

As alternativas de “B” a “G”, querem saber o que será impresso. Porém como não é possível ter certeza se o coletor de lixo foi realmente invocado (linha 15), não se pode ter certeza se o método finalize() (linha 7) seráinvocado, pelos objetos elegíveis para Coleta de Lixo, desta forma, apenas a letra “G” é verdadeira, não sendo possível determinar o que seráimpresso.

Obs.: Após a analise de quantos objetos estarão elegíveis após a linha 14, caso o número seja 0 (zero) épreciso marcar a “G” como falsa e marcar a “B” como verdadeira, pois, nestas condições, pode-se ter certeza que finalize não será invocado.

Page 9: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Ao final, verificaremos se há Objetos elegíveis para

confirmar esse resultado

Page 10: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

O Coletor de lixo seráinvocado ?

Page 11: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Como acabamos de verificar, não épossível ter certeza se a linha 15 invocará o coletor de lixo, sendo assim, não se pode garantir as afirmativas das alternativas “H”,”O” ou “P” sendo, portanto, todas falsas.

Page 12: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Page 13: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) na linha 15 todos os objetos serão coletados pelo GCP) na linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Como saber se um objetoEsta elegível para o GC ?

Page 14: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

A melhor forma é separar de um lado a lista das variáveis, e de outro a lista de objetos, e das referencia deles (indicado pela linha 5), e ir preenchendo linha a linha, para verificar o andamento

Page 15: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GC L) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

A melhor forma é separar de um lado a lista das variáveis, e de outro a lista de objetos, e das referencia deles (indicado pela linha 5), e ir preenchendo linha a linha, para verificar o andamento

Para resolver a questão, mais facilmente chamaremos o membro do objeto sempre de “x”, ignorando o nome “intern”

Page 16: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null

Linha 9

Objetos------------------------------

Page 17: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 existem 2 objetos elegíveis para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null

Linha 9

Objetos------------------------------

Nenhum objeto foi criado ate a linha 9, sendo assim a letra “I” só pode ser falsa, e não existe nenhum objeto elegível nesta linha.

Page 18: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GC L) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null

Linha 9

Objetos------------------------------

Page 19: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = nulla2 = obj1

Linha 10

Objetos------------------------------obj1.x = obj2obj2.x = null

Page 20: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = nulla2 = obj1

Linha 10

Objetos------------------------------obj1.x = obj2obj2.x = null

apesar de nenhuma variávelna pilha apontar para obj2obj1.x o faz, portanto esteNão é elegível para o GC

Page 21: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = nulla2 = obj1a3 = obj3

Linha 11

Objetos------------------------------obj1.x = obj2obj2.x = nullobj3.x = obj1

Page 22: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = nulla2 = obj1a3 = obj3

Linha 11

Objetos------------------------------obj1.x = obj2obj2.x = nullobj3.x = obj1

obj3.x é igual a a2, e neste Momento, o valor

de a2 é obj1

Page 23: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 12

Objetos------------------------------obj1.x = obj2obj2.x = nullobj3.x = obj1

Page 24: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 13

Objetos------------------------------obj1.x = obj2obj2.x = nullobj3.x = obj1 obj4obj4.x = null

a1 se refere a obj3 portanto o novo obj4 será

passado a obj3.x

Page 25: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 13

Objetos------------------------------obj1.x = obj2obj2.x = nullobj3.x = obj1 obj4obj4.x = null

a1 se refere a obj3 portanto o novo obj4 será

passado a obj3.x

*a1 aponta para obj3, que aponta para obj4, que aponta para null.*a2 aponta para obj1, que aponta para obj2, que aponta para null.

Portanto “J” é falso e “K” éverdadeiro.

Page 26: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 13

Objetos------------------------------obj1.x = obj2obj2.x = nullobj3.x = obj1 obj4obj4.x = null

Page 27: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 14

Objetos------------------------------obj1.x = obj2 nullobj2.x = nullobj3.x = obj1 obj4obj4.x = null

a2 se refere a obj1 portanto obj1.x passara a

referenciar null

Page 28: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 14

Objetos------------------------------obj1.x = obj2 nullobj2.x = nullobj3.x = obj1 obj4obj4.x = null

*a1,a3 apontam para obj3, que aponta para obj4, que aponta null.*a2 aponta para obj1, que aponta para null.

E portanto ninguem aponta para obj2, que é o único elegível para o GC

Page 29: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Variáveis----------------------------a1 = null obj3a2 = obj1a3 = obj3

Linha 14

Objetos------------------------------obj1.x = obj2 nullobj2.x = nullobj3.x = obj1 obj4obj4.x = null

*a1,a3 apontam para obj3, que aponta para obj4, que aponta null.*a2 aponta para obj1, que aponta para null.

E portanto ninguem aponta para obj2, que é o único elegível para o GC

Page 30: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

Lembrando a observação feita sobre o finalize(), como existe um objeto elegível para o GC, não épossível determinar, na linha 15, se o Coletor foi realmente invocado. E portanto saber se o contador esta em 0 (zero) ou em 1 (um), portanto “B” érealmente falso e “G” é verdadeiro.

Page 31: SCJP 6 - Garbage Collector

Garbage Collector• Quais afirmativas são corretas ?

1. class A {2. static int count = 0;3. A intern;4. public A(A a) {5. intern=a; 6. }7. protected void finalize() { ++count; }8. public static void main(String args[]) {9. A a1=null; 10. A a2=new A(new A(null)); 11. A a3=new A(a2); 12. a1=a3; 13. a1.intern=new A(null); 14. a2.intern=null;15. System.gc();16. System.out.print(count);17. }18. }

A) O código não compilaB) O resultado imprimirá 0C) O resultado imprimirá 1D) O resultado imprimirá 2E) O resultado imprimirá 3F) O resultado imprimirá 4G) Não é possível prever o que seráimpresso.H) A linha 15 invocará o Coletor de Lixo.I) Após a linha 9 existe 1 objeto elegível para o GCJ) Após a linha 13 existe 1 objeto elegível para o GCK) Após a linha 13 nenhum objeto esta elegível para o GCL) Após a linha 14 existe 1 objeto elegível para o GCM) Após a linha 14 existem 2 objetos elegíveis para o GCN) Após a linha 14 existem 3 objetos elegíveis para o GCO) Após a linha 15 todos os objetos serão coletados pelo GCP) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados.

A resposta do exercicio é “G”, “K” e “L” são verdadeiras.