View
2.685
Download
4
Category
Tags:
Preview:
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
Garbage Collector
Tomaz LavieriSun Certified Java Programmer 6tomazlavieri@gmail.comhttp://java-i9se.blogspot.com.br
CertificaCertificaçção Sunão Sun®® para Programador para Programador JavaJavaTMTM 66
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. }
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.
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 ?
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.
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.
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 ?
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.
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
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 ?
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.
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.
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 ?
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
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”
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------------------------------
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.
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------------------------------
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
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
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
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
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
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
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.
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
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
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
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
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.
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.
Recommended