Os conceitos de forte citação, citação suave, citação fraca e citação virtual
Forte referência
Citações fortes se referem a citações comuns no código do programa. Por exemplo, o objeto e o STR no código a seguir são citações fortes:
Objeto objeto = new Object (); String str = "Hello";
Enquanto um objeto tiver uma forte referência associada a ele, a JVM definitivamente não reciclará esse objeto. Mesmo na ausência de memória, a JVM prefere lançar um erro externo do que reciclar esse objeto.
Por exemplo, o seguinte código:
classe pública principal {public static void main (string [] args) {new main (). fun1 (); } public void fun1 () {object = new Object (); Objeto [] objarr = novo objeto [1000]; }}Ao executar para objeto [] objarr = novo objeto [1000]; Ao executar para essa frase, se houver memória insuficiente, a JVM lançará um erro de OOM e não reciclará o objeto apontado pelo objeto. No entanto, deve -se notar que, após a execução do Fun1, o objeto e o Objarr não existem mais; portanto, os objetos que apontam serão reciclados pela JVM.
Se você deseja interromper a associação entre uma forte referência e um objeto, poderá exibir a referência a NULL, para que a JVM recicle o objeto no momento apropriado.
Softreference
As referências suaves são usadas para descrever alguns objetos úteis, mas não necessários, e são representados em Java usando a classe java.lang.ref.softreference. Para referências suaves, objetos associados, a JVM reciclará o objeto somente quando houver memória insuficiente. Portanto, isso pode ser usado bem para resolver o problema da OOM, e esse recurso é muito adequado para implementar o cache: como cache de páginas da web, cache de imagens, etc.
Uma referência suave pode ser usada em conjunto com uma fila de referência (ReferenceQueue). Se o objeto referenciado pela referência soft for reciclado pela JVM, a referência soft será adicionada à fila de referência associada. Aqui está um exemplo de uso:
importar java.lang.ref.weakReference; classe pública Main {public static void main (string [] args) {frAchaneference <string> sr = new frActReference <string> (new String ("hello"); System.out.println (sr.get ()); System.gc (); // Notifique o sistema de coleta de lixo da JVM para lixo.println (sr.get ()); }}Referência fraca
Referências fracas também são usadas para descrever objetos não essenciais. Quando a JVM executa a coleta de lixo, os objetos associados a referências fracas serão recicladas, independentemente de a memória ser suficiente. Em Java, use a classe java.lang.ref.weakreference para representá -la. Aqui está um exemplo de uso:
importar java.lang.ref.weakReference; classe pública Main {public static void main (string [] args) {frAchaneference <string> sr = new frActReference <string> (new String ("hello"); System.out.println (sr.get ()); System.gc (); // Notifique o sistema de coleta de lixo da JVM para lixo.println (sr.get ()); }}Phantomreference
As referências virtuais são diferentes das referências suaves anteriores e das referências fracas, e não afetam o ciclo de vida do objeto. Em Java, use a classe java.lang.ref.phantomreference para representá -la. Se um objeto estiver associado a uma referência virtual, ele poderá ser reciclado pelo coletor de lixo a qualquer momento, assim como nenhuma referência está associada a ele.
Deve -se notar que as referências virtuais devem ser usadas em associação com a fila de referência. Quando o coletor de lixo está se preparando para reciclar um objeto, se descobrir que possui uma referência virtual, adicionará essa referência virtual à fila de referência associada. O programa pode entender se o objeto referenciado será coletado por lixo ao julgar se uma referência virtual foi adicionada à fila de referência. Se o programa descobrir que uma referência virtual foi adicionada à fila de referência, pode tomar as ações necessárias antes que a memória do objeto referenciada seja reciclada.
Entendimento mais aprofundado de citações suaves e fracas
Muitas vezes usamos citações fortes ao escrever código. Para os outros três tipos de citações, os mais usados são citações suaves e citações fracas. Esses dois têm semelhanças e diferenças. Todos eles são usados para descrever objetos não essenciais, mas objetos associados a referências suaves só serão reciclados quando houver memória insuficiente, enquanto os objetos associados a referências fracas sempre serão recicladas quando a JVM for coletada de lixo. Em vista dos recursos acima, as referências suaves são adequadas para o cache. Quando a memória é insuficiente, a JVM pode reciclar a memória. Referências fracas podem ser usadas para evitar vazamentos de memória na função de retorno de chamada. Como as funções de retorno de chamada são frequentemente classes internas anônimas e salvam implicitamente referências a classes externas, se a função de retorno de chamada for chamada de volta em outro thread e se a classe externa precisar ser reciclada neste momento, vazará a memória, porque as classes anônimas armazenam referências fortes a classes externas.
O artigo acima fala brevemente sobre a diferença entre os quatro métodos de citação no Java é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.