JavaRush /Blogue Java /Random-PT /Nível 34. Respostas às perguntas da entrevista sobre o tó...
lichMax
Nível 40
Санкт-Петербург

Nível 34. Respostas às perguntas da entrevista sobre o tópico do nível

Publicado no grupo Random-PT
Pesquisei no site usando minha pesquisa nativa e pesquisei tudo usando o Google - não há respostas para as perguntas deste nível. Talvez eu tenha perdido alguma coisa e eles ainda estejam aqui em algum lugar do site!? Nível 34. Respostas às perguntas da entrevista sobre o tema do nível - 1Por precaução, estou anexando as respostas que escrevi para mim: Perguntas para a entrevista:
  1. O que é coleta de lixo?
  2. Quando o método é chamado finalize?
  3. O que acontece se finalizeocorrer uma exceção em um método?
  4. O que aconteceu SoftReference?
  5. O que aconteceu WeakReference?
  6. O que aconteceu PhantomReference?
  7. Como funciona WeakHashMap? Onde é usado?
  8. Por que você precisa passar uma fila para o construtor PhantomReference?
  9. Por que você precisa de um registrador?
  10. Quais configurações do registrador você conhece?
Minhas respostas:
  1. Este é um mecanismo para destruir objetos desnecessários. Objetos desnecessários são objetos não utilizados. Existem duas maneiras de encontrar esses objetos: contagem de referência e rastreamento. No primeiro caso, cada objeto está associado a uma variável que armazena o número de referências a este objeto. Se esse número cair para zero, o objeto será considerado morto. No segundo caso, o coletor de lixo segue as referências do objeto desde os pontos raiz até o final (até o valor nulo), percorrendo toda a árvore. Objetos que não podem ser alcançados a partir dos pontos raiz são considerados mortos. Os pontos raiz são todos os threads ativos, o método principal, os argumentos do método main(), bem como todas as variáveis ​​estáticas da classe na qual o método está localizado main().

    Determinar quais objetos são elegíveis para destruição é apenas a primeira parte do trabalho do coletor de lixo. A segunda parte é excluí-los e trabalhar com a memória. Uma abordagem híbrida é usada aqui. Toda a memória disponível para objetos é dividida em três áreas: a área de objetos jovens, a área de objetos antigos e a área de objetos permanentes (são classes, metadados, strings internadas, etc.). A primeira área é dividida em mais três subáreas: Eden e suvivor space 1 e 2. Eden armazena todos os objetos recém-criados. As duas zonas restantes armazenam objetos que sobreviveram à última coleta de lixo. O coletor de lixo trabalha com toda essa área (a área dos objetos jovens) da seguinte maneira. Durante a próxima coleta de lixo, ele encontra objetos vivos na área do Éden e os copia para a segunda área de sobreviventes. Depois disso, ele também procura objetos vivos na primeira área e os copia para a segunda área de sobreviventes, ou, se já forem “velhos” o suficiente, para a área da geração antiga. Depois disso, ele limpa a área do Éden e a primeira área de sobreviventes. Em seguida, ele considera que a segunda área de sobreviventes é a primeira. E pronto, acaba a coleta de lixo para essa área.

    Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые an objectы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых an objectов. После этого сборщик мусора завершает свою работу.

  2. Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод System.runFinalization() or Runtime.getRuntime().runFinalization().

  3. Это исключение будет проигнорировано, и произойдёт выход из метода.

  4. SoftReference переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы.

  5. WeakReference — это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора.

  6. PhantomReference — это самая слабая link. Механизм работы с такими link запускается только если на an object нет больше ниHowих других ссылок. Призрачные ссылки используются для сложной proceduresы удаления an object. Это может быть необходимо, если an object делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС or пишет своё состояние в файл, or делает ещё что-то важное и сложное.

    Механизм работы с такими linkми следующий. Если на an object не осталось больше ниHowих других ссылок, и у него переопределён метода finalize(), то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот an object пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный an object помещается в очередь призрачных an objectов, из которой будет удалён, когда у его призрачной ссылки вызовут метод clear(). Также стоит отметить, что метода get() у призрачной link всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращает null, только если an object уже уничтожен).

  7. WeakHashMap — это HashMap, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на an object существует только link в WeakHashMap, то из WeakHashMap будет удалена вся пара "ключ-meaning", связанная с этим an objectом.

    В связи с этим данная коллекция может быть использована для хранения Howой-то дополнительной, не очень важной информации об an objectе. Также её удобно использоваться для хранения Howой-то временной информации (которая нужная только в рамках данной операции).

  8. Эта очередь используется для отслеживания того, что an object больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным an objectом (например, удаление созданных файлов).

  9. Um logger é necessário para salvar informações sobre o comportamento do programa, bem como alguns de seus estados. Pode ser usado para depurar e identificar erros e falhas do programa. O logger também permite que o desenvolvedor receba feedback de seu programa enquanto ele está em execução. Além disso, em caso de falhas críticas, o logger pode notificar rapidamente as pessoas certas (por exemplo, desenvolvedores, clientes, gerentes de projeto, suporte técnico, etc.) sobre essas falhas.

  10. Ao configurar o log, você pode especificar o seguinte:

    • o local onde as informações serão gravadas (arquivo, console, banco de dados, rede, etc.)
    • que nível as mensagens serão gravadas
    • tipo de entradas de log
    • para arquivos você pode especificar: caminho para arquivo e diretório, tamanho do arquivo, número de arquivos
    • especifique para cada pacote individual seu próprio nível de mensagens que serão gravadas no log
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION