Fechar streams de um arquivo sem ter referência a elas

8 respostas
Rubem_Azenha

Pessoal, é possível com em java puro, fechar todas as streams de um arquivo sem ter referência a elas, para garantir que eu consiga mover um arquivo?

8 Respostas

louds

Talvez, mas vai precisar de muita macumba. Muita em “todos seus cabelos vão ficar brancos, fracos e cair”.

Fabricio_Cozer_Marti

Rubem,

interessante sua dúvida cara! Será que a jdk provê algum mecanismo de controle que possibilite descobrir quais objetos estão com os streams abertos ? Seria análagos a Threads ,que eu sei que tem uma API do java que gerencia as Threads, possibilitanto até verificar se existe deadlocks e tal, mas com arquivos, eu nunca vi. Se eu conseguir encontrar alguma coisa no google eu posto aqui.

Rubem_Azenha

Então, o Groovy não tem um esquema de percorrer todos os objetos na memória da JVM? Como que faz isso?

F

Pelo jeito esqueceram do metodo close() por ai neh. :lol:

]['s

louds

Que eu saiba ele não tem não, mesmo pq isso é basicamente impossivel de implementar.

Me ocorreu uma coisa, com AOP você poderia resolver isso de forma até que razoavel. Você precisa que todos os handler abertos pela mesma JVM sejam fechados ou incluindo o de programas externos?

Existe uma “solução” (muitas aspas) que eu já usei e funcionou, que é alocar muitos objetos, forçar um full gc via system.gc e finalmente mandar executar todos finalizers.

Fabricio_Cozer_Marti

Pelo jeito esqueceram do metodo close() por ai neh. :lol:

]['s
pois é, ele iria chamar o close, mas o problema é que ele não sabe de quem chamar … hehehehe

Fabricio_Cozer_Marti

Que eu saiba ele não tem não, mesmo pq isso é basicamente impossivel de implementar.

Me ocorreu uma coisa, com AOP você poderia resolver isso de forma até que razoavel. Você precisa que todos os handler abertos pela mesma JVM sejam fechados ou incluindo o de programas externos?

Existe uma “solução” (muitas aspas) que eu já usei e funcionou, que é alocar muitos objetos, forçar um full gc via system.gc e finalmente mandar executar todos finalizers.
mas isso não é 100% garantido, dependendo do tipo de sistema, não sendo tempo real e crítico, pode até ser, mas uma solução mais factível seria percorrer o heap de objetos do java e fazer algumas ‘gambis’ pra tentar descobrir os objetos abertos que não estão sendo utilizados e fechá-los, mas isso é bem complicadinho pra fazer na mão …

Mauricio_Linhares

Implementando um ClassLoader no braço não seria possível não?

Criado 6 de junho de 2006
Ultima resposta 7 de jun. de 2006
Respostas 8
Participantes 5