JavaRush /Java Blog /Random-KO /레벨 34. 레벨 주제에 대한 인터뷰 질문에 대한 답변
lichMax
레벨 40
Санкт-Петербург

레벨 34. 레벨 주제에 대한 인터뷰 질문에 대한 답변

Random-KO 그룹에 게시되었습니다
내 기본 검색을 사용하여 사이트를 검색하고 Google을 사용하여 모든 것을 검색했습니다. 이 수준의 질문에 대한 답변이 없습니다. 어쩌면 내가 놓친 것이 있는데 사이트 어딘가에 아직 남아 있을 수도 있습니다!? 레벨 34. 레벨-1 주제에 관한 인터뷰 질문에 대한 답변만일을 대비해 제가 직접 작성한 답변을 첨부합니다. 인터뷰 질문:
  1. 가비지 컬렉션이란 무엇입니까?
  2. 메소드는 언제 호출됩니까 finalize?
  3. finalize메서드에서 예외가 발생 하면 어떻게 되나요 ?
  4. 무슨 일이 일어났나요 SoftReference?
  5. 무슨 일이 일어났나요 WeakReference?
  6. 무슨 일이 일어났나요 PhantomReference?
  7. 어떻게 작동하나요 WeakHashMap? 어디에 사용되나요?
  8. 왜 생성자에 큐를 전달해야 합니까 PhantomReference?
  9. 왜 로거가 필요합니까?
  10. 어떤 로거 설정을 알고 있나요?
내 답변:
  1. 이는 불필요한 객체를 파괴하는 메커니즘입니다. 불필요한 개체는 사용되지 않은 개체입니다. 이러한 객체를 찾는 방법에는 참조 계산과 추적이라는 두 가지 방법이 있습니다. 첫 번째 경우, 각 개체는 이 개체에 대한 참조 수를 저장하는 변수와 연결됩니다. 이 숫자가 0으로 떨어지면 개체가 죽은 것으로 간주됩니다. 두 번째 경우, 가비지 수집기는 루트 지점부터 끝까지(null 값까지) 개체 참조를 따라 전체 트리를 순회합니다. 루트 지점에서 도달할 수 없는 개체는 죽은 것으로 간주됩니다. 루트 포인트는 모든 활성 스레드, 기본 메소드, 메소드의 인수 main()및 메소드가 위치한 클래스의 모든 정적 변수입니다 main().

    폐기할 수 있는 개체를 결정하는 것은 가비지 수집기 작업의 첫 번째 부분일 뿐입니다. 두 번째 부분은 실제로 이를 삭제하고 메모리를 사용하여 작업하는 것입니다. 여기서는 하이브리드 접근 방식이 사용됩니다. 개체에 사용 가능한 모든 메모리는 젊은 개체 영역, 오래된 개체 영역, 영구 개체 영역(클래스, 메타데이터, 인턴 문자열 등)의 세 가지 영역으로 나뉩니다. 첫 번째 영역은 Eden과 생존자 공간 1과 2의 세 가지 하위 영역으로 더 나뉩니다. Eden은 새로 생성된 모든 객체를 저장합니다. 나머지 두 영역은 마지막 가비지 수집 후에도 유지되는 개체를 저장합니다. 가비지 컬렉터는 이 전체 영역(젊은 개체 영역)을 다음과 같이 작업합니다. 다음 가비지 컬렉션에서는 에덴 영역에서 생명체를 찾아 두 번째 생존자 영역에 복사한다. 그 후, 그는 또한 첫 번째 영역에서 살아있는 물체를 찾아 두 번째 생존자 영역에 복사하거나 이미 충분히 "오래된" 경우 구세대 영역에 복사합니다. 이후 에덴지역과 첫 번째 생존자 지역을 클리어한다. 다음으로 그는 생존자의 두 번째 영역을 첫 번째 영역으로 간주합니다. 이것으로 이 영역에 대한 가비지 수집이 종료됩니다.

    Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые 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. 프로그램의 동작과 일부 상태에 대한 정보를 저장하려면 로거가 필요합니다. 프로그램 오류 및 실패를 디버깅하고 식별하는 데 사용할 수 있습니다. 또한 로거를 사용하면 개발자는 프로그램이 실행되는 동안 프로그램으로부터 피드백을 받을 수 있습니다. 또한 중대한 오류가 발생한 경우 로거는 해당 오류에 대해 적합한 사람(예: 개발자, 고객, 프로젝트 관리자, 기술 지원 등)에게 신속하게 알릴 수 있습니다.

  10. 로깅을 설정할 때 다음 사항을 지정할 수 있습니다.

    • 정보가 기록될 장소(파일, 콘솔, 데이터베이스, 네트워크 등)
    • 어느 수준의 메시지가 기록될 것인가
    • 로그 항목 유형
    • 지정할 수 있는 파일의 경우: 파일 및 디렉터리 경로, 파일 크기, 파일 수
    • 각 개별 패키지에 대해 로그에 기록될 자체 메시지 수준을 지정합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION