Como a descarregar Caf� Aula
Eu tenho estado perguntado essa quest�o algumas vezes. Recentemente Xyling perguntado a mesma quest�o no dele blog. Portanto Eu pensava um simples explana��o pode ser para que.
A descarregar uma classe voc� tem criar um uso classloader e carga a classe usando a. Gato faz a e portanto faz JRun. Voc� pode parecer em Gato c�digo for um exemplo.
Atr�s de ti s�o completo com a aula voc� necessita libertar todas as refer�ncias � aula assim como � aula bagageiro by redefinindo as vari�veis ou ambiente as senhoras pedirem nulo.
Ent�o quer esperar Sistema() a descarregar a classe ou voc� chama a diretamente num al�a t� n�o mais bytes pode ser expedito. agora normalmente chamando a duas vezes faz o truque.
nota Voc� n�o pode descarregar um �nico aula. Voc� tem que fazer descarregar o classloader juntamente com a. Portanto obviamente Sistema classloader n�o � o adequado para esta tarefa.
Nota 2: Isto � como JSP p�ginas s�o recarregar dinamicamente a cada momento voc� troca o c�digo. E sim isto � porqu� primeira vez leva muita mais tempo carregar ent�o subsequente tempos.
Arquivado sobComo A, Caf� Software, Tecnologia |
|
RSS 2.0 |
Trackback esse artigo
|
Correio eletr�nico esse artigo
Voc� pode tamb�m como ler |





































Desfile 15th, 2005 at 631: pm
Oi,
Muito obrigada muito dali informa��o.
C�rebro se Eu estendo my quest�o aqui ela mesma? Na verdade, Eu carrego my aulas atrav�s URLClassLoader. E em geral Estou carregando JARRA arquivos atrav�s URLClassLoader. Agora Eu quero esse jarro arquivo aquela compress�o descarregar. Ser� que posso estender seu l�gica a URLClassLoader for JARRA arquivos tamb�m?
Desfile 15th, 2005 at 633: pm
Muito obrigada.
Desfile 15th, 2005 at 641: pm
Na verdade, o JSP primeira- carga tempo n�o � SOMENTE devido a a classe ser recarregar, ( carregando uma classe da bytecode faz’ presa que longa, se a fazia Caf� would ser uma barra lote mais devagar que � ;-). UM more significante tempo � cansado gerador o bytecode, como um altera��o � JSP fonte tem que ser convertido primeira em Caf� fonte, e em seguida em a byte- c�digo, que pode ent�o ser carregado pela ClassLoader. Portanto, adicionar dois analisar/ gerar ciclos a um byte carga…
Desfile 16th, 2005 at 428: pm
Se em que voc� est� interessada vendo um interessando curva em din�mico recarregar de aulas, sair de a origem na nossa plugue motor at http:/www.platonos.org/. N�s at� carga plugue, qualquer com seu classloader, mas estamos agora adicionando a capacidade de dinamicamente descarregar por��es de um plugue que s�o sujeito em outro.
Como a curvas fora, quando plugue UM proporciona uma interface que plugue B proporciona uma implementa��o �, plugue B ClassLoader ( atrav�s delega��o a Como’ classloader) por�o um bloqueio ao implementa��o Aula ela mesma. J� ap�s n�s nulo fora o classloader em plugue UM ( se estamos tentando a descarregar Um), Bs’ classloader conserva um bloqueio na a bem de a interface Aula que Bs’ implementa��o aula conserva um bloqueio em. Basicamente voc� tem this:
interface pluginAInterface{}
aula pluginBImpl implementos pluginAInterface{}
qualquer � carregado by um diferente classloader. Quando usada, plugue Bs’ classloader v� que pluginBImpl implementos pluginAInterface. A come�os em plugue Bs’ classloader olhando lhe. A cal�o’ achado a l� ( devido a que pluginAInterface Aula � em plugue Como’ classloader classpath). O plugue motor delegados o parecer a plugue Como’ classloader encontrar o byte c�digo dali pluginAInterface Aula. Dela’ encontrado l�, portanto plugue Como’ classloader “ cargas” o bytecode, mas plugue Bs’ classloader “ v�” o bytecode by inicialmente delega��o a um encontrar a. Uma vez encontrado, um classloaders’ constru�do em cache lojas o classloaderclass: perdigueiro ( senso, o classloader E a classe compor uma esp�cie de “ chave” como um ponteiro � atual bytecode em mem�ria) portanto a j� n�o necessita de ser delegado a um. Mas, o grande problema � tudo o pluginBImpl Aula manter seu pr�prio’ lista de interfaces a implementos, em primeiro lugar seu Aula refer�ncia. O m� coisa por volta isto � n�o h� forma de fazer set this a nulo at runtime!
Portanto nossa truque consiste em utilizar um momento classloader dentro um plugue para permitir qualquer interface implementada by another plugue ter seu pr�prio’ classloader portanto n�s podemos descarte aquela obter recarregar/ descarregar trabalhar.
Dela’ um peda�o complicado, mas a faz o truque. Provavelmente ainda mais escondido desembocaduras n�s asilo’ achar ainda.
Desfile 18th, 2005 at 300: am
@Goldy Lukka Sim. Voc� deveria conseguir a. Agora EU asilo’ usado URLClassLoader nesta moda, portanto Estou n�o seguro se tem qualquer dif�cil- a- remover refer�ncias. Eu adivinho um prego solu��o � para que
BTW: Eu desfruto seu s�tio.
@Kevin Agradecimento � muita informante coment�rio.
Desfile 19th, 2005 at 254: am
Ouro Lukka,
O truque para utilizar URLClassLoader recarregar ou descarregar .jar arquivos est� a fazer seguro que nenhum outro c�digo � recomendando qualquer das aulas a partir do .jar arquivo. Depend�ncias s�o dif�cil manejar. N�s temos ido a grande dores tentar para resolver descarregar/ recarregar com a emiss�o de plugue dependendo em um another. N�s ainda tem problemas em muitos casos fazendo a acontecer. Nalgumas casos, criadores de plugue justamente tem estar atento que se as senhoras querem fazer seu plugue como din�mico conforme for poss�vel, elas really tem desenvolver a de tal modo que elas propriamente limpeza total qualquer refer�ncias as senhoras h�o em outro plugue aulas.
Se seu .jar arquivo � justamente adicionando implementa��es dizer, um �mago aplica��es interface API, voc� deveria conseguir a facilmente remover a. Como n�s descoberto, um implemting aula conserva uma refer�ncia ( fechadura) ao interface a implementos. De modo a que a aula na sua .jar arquivo would manter o ref � interface, qual � est� legal, voc� simplesmente nulo a fora e/ ou nulo o classloader que carregado o .jar e voc� s�o fino. Se agora o .jar arquivo proporciona interfaces que outro aulas ( qui�� de outro .jar arquivos) usar, que transforma-se em mais dif�cil. Qualquer aula fora da classloader que carregado o .jar arquivo fazendo utiliza��o de qualquer aula de dentro o carregado .jar possui a tamb�m ser descarregar. Ainda, referente nossa motor, a come�os um rea��o em cadeia de descarregar eventos que pode ser dif�cil manejar. N�s solver o problema by tendo dois classloader inst�ncias por plugue. Um que al�a os interfaces que s�o implementada by outro plugue aulas, e um de resto da aulas. Dela’ n�o bonita, mas assim distante funciona. Estamos ainda experimentando fazer this um melhor processo.
Desfile 22nd, 2005 at 735: pm
Kevin,
Dela’ real que you cal�o’ nulo a refer�ncia � interface aula ( ClassgetInterfaces#() ), se this foi poss�vel estaria acanhado que you remover a interface na byte c�digo at runtime, de:
p�blica aula MyTestImpl implementos Test�culo
{
}
a
p�blica aula MyTestImpl
{
}
A mesma � real for superclasses.
Desfile 23rd, 2005 at 623: pm
dela’ grande informa��o que como plugue s�o obras. Posso a mais simples poss�vel c�digo de h�bito aula bagageiro. Em �ltima an�lise o uso aula bagageiro � nees aquela compress�o carregado pela omiss�o classloader ou n�o? Neste caso ent�o ir� eu poder sede a classloader na callgraph de tal esp�cie de programa?
Abril 1st, 2005 at 602: am
@Sandip Por que n�o uso o URLClassLoader? Tamb�m h� um prova ClassLoader c�digo de que trata Caf� Tutoriais.
Setembro 11th, 2006 at 1139: am
Agradecimento � informa��o.
Eu leio alguma coisa ao Internet qual Eu penso � importante for algumas pessoas aqui:
Dois aulas n�o s�o da mesmo pacote se elas s�o carregadas by diferente ClassLoader objetos!
Permite’ fala voc� tem uma embalagem com dois aulas, um � p�blica e o outro pacote- privado. Estes devia ser carregado pela mesma ClassLoaderor( subclass) objeto. Se you dont’ havia um runtime erro quando o p�blica aula tenta avaliar o pacote- privado aula.
Portanto se voc� planejava fazer um nova ClassLoader objeto para todos aula, considerar usando um ClassLoader objeto para cada pacote. O outro op��o � fazer tudo aulas p�blica.