Your SlideShare is downloading. ×
SCJP 6 - Garbage Collector
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

SCJP 6 - Garbage Collector

2,615
views

Published on

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

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

Published in: Education, Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,615
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
79
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ® TM Certificação Sun para Programador Java 6 Garbage Collector Tomaz Lavieri Sun Certified Java Programmer 6 tomazlavieri@gmail.com http://java-i9se.blogspot.com.br
  • 2. 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. }
  • 3. Garbage Collector • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 4. Compila ? Garbage Collector • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de 7. protected void finalize() { ++count; } Lixo. I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta 11. A a3=new A(a2); elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 5. Como é possível verificar, o código não contém nenhum erro, e Garbage Collector será compilado normalmente, portanto a letra “A” é falsa. • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de 7. protected void finalize() { ++count; } Lixo. I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta 11. A a3=new A(a2); elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 6. Garbage Collector • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 7. O que será impresso ? Garbage Collector • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de 7. protected void finalize() { ++count; } Lixo. I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta 11. A a3=new A(a2); elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 8. Garbage Collector As alternativas de “B” a “G”, querem saber o que será impresso. Porém • Quais afirmativas são corretas ? como não é possível ter certeza se o coletor de A) O código não compila invocado lixo foi realmente 1. class A { (linha 15), B) O resultado imprimirá 0 se o não se pode ter certeza 2. static int count = 0; C) O resultado imprimirá 1 método finalize() (linha 7) será D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { invocado, pelos objetos elegíveis para F) O resultado imprimirá 4 5. intern=a; Coleta de Lixo, desta forma, o que será a G) Não é possível prever apenas 6. } letra “G” é impresso.15 invocará o Coletor de verdadeira, não sendo H) A linha 7. possível determinar o que será protected void finalize() { ++count; } Lixo. G) Após a linha 9 existe 1 objeto 8. impresso. elegível para o GC public static void main(String args[]) { 9. A a1=null; H) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); Obs.: Após Após a linha 13 existem 2 objetos I) a analise de quantos 11. A a3=new A(a2); elegíveis para o GC objetos estarão a linha 14 existe 1 objeto linha J) Após elegíveis após a 12. a1=a3; 13. a1.intern=new A(null); 14, caso oelegível para sejaexistem 2 objetos número o GC 0 (zero) é K) Após a linha 14 14. a2.intern=null; preciso marcar apara o como falsa e elegíveis “G” GC L) Após a linha 14 existem 3 objetos 15. System.gc(); marcar a “B” como verdadeira, pois, elegíveis para o GC 16. System.out.print(count); nestas condições,linha 15 todos os objetos M) Após a serão coletados pelo GC ter certeza pode-se 17. } que finalize não apara o15 apenas coletados. N) Após será invocado. Elegíveis linha GC serão os objetos 18. }
  • 9. Ao final, verificaremos se há Objetos elegíveis para Garbage Collector confirmar esse resultado • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 10. O Coletor de lixo será Garbage Collector invocado ? • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor 7. protected void finalize() { ++count; } de Lixo. I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta 11. A a3=new A(a2); elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 11. Como acabamos de verificar, não é possível ter certeza se a linha 15 Garbage Collector invocará o coletor de lixo, sendo assim, não se pode garantir as afirmativas das • Quais afirmativas são corretas ? alternativas “H”,”O” ou “P” sendo, portanto, todas falsas. A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor 7. protected void finalize() { ++count; } de Lixo. I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta 11. A a3=new A(a2); elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 12. Garbage Collector • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 13. Como saber se um objeto Garbage Collector Esta elegível para o GC ? • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto 8. public static void main(String args[]) { elegível para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto 11. A a3=new A(a2); esta elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) na linha 15 todos os objetos serão 16. System.out.print(count); coletados pelo GC 17. } P) na linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 14. A melhor forma é separar de um lado a lista das variáveis, e de outro a lista de Garbage Collector objetos, e das referencia deles (indicado pela linha 5), e ir • Quais afirmativas são corretas ? preenchendo linha a linha, para verificar o andamentonão compila A) O código 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 15. A melhor forma é separar de um lado a lista das variáveis, e de outro a lista de Garbage Collector objetos, e das referencia deles (indicado pela linha 5), e ir • Quais afirmativas são corretas ? preenchendo linha a linha, para verificar o andamentonão compila A) O código 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de 7. Para{ resolver a questão,Lixo. protected void finalize() ++count; } mais 8. facilmente chamaremos I) ApósGC 9 existe 1 objeto elegível public static void main(String args[]) { o membro para o a linha 9. A a1=null; do objeto sempre de “x”, J) Após a linha 13 existe 1 objeto ignorando elegível para o GC 10. o nome “intern” A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 16. Linha 9 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto 8. public static void main(String args[]) { elegível para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta 11. A a3=new A(a2); elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 17. Linha 9 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto 8. public static void main(String args[]) { elegível para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto Nenhum objeto foi criado ate a linha 9, elegível para o GC 10. A a2=new A(new A(null)); 11. A a3=new A(a2); sendo assim a letra a“I” sóGC K) Após linha 13 existem 2 objetos elegíveis para o pode ser 12. a1=a3; falsa, e não existe nenhum objeto L) Após a linha 14 existe 1 objeto elegível para o GC 13. a1.intern=new A(null); elegível nestaM) Após a linha 14 existem 2 objetos linha. elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 18. Linha 9 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto 8. public static void main(String args[]) { elegível para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 19. Linha 10 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 20. Linha 10 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { apesar F) O nenhumaprever4o que será de resultado imprimirá variável 5. intern=a; G) Não é possível na pilha apontar para obj2 impresso. 6. } obj1.x H) A linhaportanto o Coletor de o faz, 15 invocará este Lixo. 7. protected void finalize() { ++count; } public static void main(String args[]) { Não épara o GC para o GC I)elegível 9 existe 1 objeto elegível Após a linha 8. 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 21. Linha 11 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 22. Linha 11 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Nãoobj3.x éprever o que será é possível igual a a2, impresso. 6. } H)e neste invocará o Coletor de A linha 15 Momento, o valor Lixo. de a2 é obj1 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 23. Linha 12 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 24. Linha 13 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado obj4 2. static int count = 0; obj4.x = null imprimirá 1 C) O resultado D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto 11. A a3=new A(a2); esta elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } a1 se refere a obj3 P) Após a linha 15 apenas os objetos portanto o novo obj4 será Elegíveis para o GC serão coletados. 18. } passado a obj3.x
  • 25. Linha 13 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado obj4 2. static int count = 0; obj4.x = null imprimirá 1 C) O resultado D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto 11. A a3=new A(a2); esta elegível para o GC L) Após a linha 14 existe 1 objeto 12. a1=a3; *a1 aponta paraoobj3, que aponta elegível para GC 13. a1.intern=new A(null); para obj4, quelinha 14 existem 2 objetos M) Após a aponta para null. elegíveis para o GC 14. a2.intern=null; *a2 aponta para obj1, que objetos N) Após a linha 14 existem 3 aponta 15. System.gc(); elegíveis para o GC 16. System.out.print(count); para obj2, quelinha 15 todos os objetos O) Após a aponta para null. serão coletados pelo GC 17. } a1 se refere a obj3 P) Após a linha 15 apenas os objetos 18. } portanto o novo obj4 será Portanto “J” épara o GC serão coletados. Elegíveis falso e “K” é passado a obj3.x verdadeiro.
  • 26. Linha 13 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado obj4 2. static int count = 0; obj4.x = null imprimirá 1 C) O resultado D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 27. Linha 14 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 null • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado obj4 2. static int count = 0; obj4.x = null imprimirá 1 C) O resultado D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 12. a1=a3; objeto elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos a2 se refere a obj1 Elegíveis para o GC serão coletados. 18. } portanto obj1.x passara a referenciar null
  • 28. Linha 14 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 null • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado obj4 2. static int count = 0; obj4.x = null imprimirá 1 C) O resultado D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 *a1,a3 apontam para obj3, que G) Não é possível prever o que será 5. intern=a; impresso. 6. aponta para obj4, que aponta null. } H) A linha 15 invocará o Coletor de 7. *a2 aponta para obj1, que aponta protected void finalize() { ++count; } Lixo. I) Após a linha 9 existe 1 objeto elegível 8. para null. void main(String args[]) { public static para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. E portanto ninguemA(null)); para A a2=new A(new aponta K) Após a linha 13 nenhum objeto esta elegível para o GC 11. obj2, a3=new A(a2); elegível para o A que é o único L) Após a linha 14 existe 1 12. GCa1=a3; objeto elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 29. Linha 14 Variáveis Objetos Garbage Collector ---------------------------- ------------------------------ a1 = null obj3 obj1.x = obj2 null • Quais afirmativas são corretas ? a2 = obj1 obj2.x = null A) O código não compila 1. class A { a3 = obj3 obj3.x = obj1 imprimirá 0 B) O resultado obj4 2. static int count = 0; obj4.x = null imprimirá 1 C) O resultado D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 *a1,a3 apontam para obj3, que G) Não é possível prever o que será 5. intern=a; impresso. 6. aponta para obj4, que aponta null. } H) A linha 15 invocará o Coletor de 7. *a2 aponta para obj1, que aponta protected void finalize() { ++count; } Lixo. I) Após a linha 9 existe 1 objeto elegível 8. para null. void main(String args[]) { public static para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. E portanto ninguemA(null)); para A a2=new A(new aponta K) Após a linha 13 nenhum objeto esta elegível para o GC 11. obj2, a3=new A(a2); elegível para o A que é o único L) Após a linha 14 existe 1 objeto 12. GCa1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 30. Lembrando a observação feita sobre o finalize(), como existe um objeto elegível para o GC, não é Garbage Collector 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” é • Quais afirmativas são corretas ? realmente falso e “G” é verdadeiro. compila A) O código não 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. }
  • 31. Garbage Collector • Quais afirmativas são corretas ? A) O código não compila 1. class A { B) O resultado imprimirá 0 2. static int count = 0; C) O resultado imprimirá 1 D) O resultado imprimirá 2 3. A intern; E) O resultado imprimirá 3 4. public A(A a) { F) O resultado imprimirá 4 5. intern=a; G) Não é possível prever o que será impresso. 6. } H) A linha 15 invocará o Coletor de Lixo. 7. protected void finalize() { ++count; } I) Após a linha 9 existe 1 objeto elegível 8. public static void main(String args[]) { para o GC 9. A a1=null; J) Após a linha 13 existe 1 objeto elegível para o GC 10. A a2=new A(new A(null)); K) Após a linha 13 nenhum objeto esta elegível para o GC 11. A a3=new A(a2); L) Após a linha 14 existe 1 objeto 12. a1=a3; elegível para o GC 13. a1.intern=new A(null); M) Após a linha 14 existem 2 objetos elegíveis para o GC 14. a2.intern=null; N) Após a linha 14 existem 3 objetos 15. System.gc(); elegíveis para o GC O) Após a linha 15 todos os objetos 16. System.out.print(count); serão coletados pelo GC 17. } P) Após a linha 15 apenas os objetos Elegíveis para o GC serão coletados. 18. } A resposta do exercicio é “G”, “K” e “L” são verdadeiras.