이것은 매우 귀찮은 질문이며, 언어의 유용성에도 불구하고 많은 사람들이 Java에 반대하는 데 기여한다고 생각합니다.
"System.gc"가 무엇이든 할 수 없다는 사실은 믿을 수 없을 정도로 어렵고 "공포, 불확실성, 의심"느낌을 언어에 쉽게 부를 수 있습니다.
대부분의 경우 중요한 이벤트가 발생하기 전에 의도적으로 발생하는 메모리 스파이크를 처리하는 것이 좋습니다. 이로 인해 사용자는 프로그램이 잘못 설계되었거나 응답하지 않는다고 생각하게됩니다.
가비지 수집을 제어 할 수있는 능력은 매우 훌륭한 교육 도구가 될 것입니다. 따라서 가비지 수집의 작동 방식과 프로그램이 기본 동작 및 제어 된 동작을 악용하는 방법을 사람들의 이해도를 향상시킬 수 있습니다.
이 스레드의 인수를 검토하겠습니다.
- 비효율적입니다.
종종 프로그램이 아무 것도하지 않을 수 있으며 프로그램 방식으로 인해 아무것도하지 않는 것을 알고 있습니다. 예를 들어, 큰 대기 메시지 상자를 사용하여 일종의 오래 기다릴 수 있으며 마지막에는 쓰레기를 수집하는 호출을 추가하여 실행 시간이 실제로는 오래 기다리지 만 더 중요한 작업 중에 gc가 작동하지 않도록합니다.
- 항상 나쁜 습관이며 깨진 코드를 나타냅니다.
동의하지 않습니다. 가비지 수집기가 무엇인지는 중요하지 않습니다. 쓰레기를 추적하고 청소하는 것이 직업입니다.
사용량이 덜 중요한 시간에 gc를 호출하면 수명이 특정 코드에 의존하지만 가비지를 수집하기로 결정할 때 실행 가능성을 줄입니다.
물론, 원하는 방식이나 예상대로 작동하지 않을 수도 있지만 전화를 걸 때 아무 일도 일어나지 않으며 사용자는 속도 저하 / 다운 타임을 용인 할 수 있습니다. System.gc가 작동하면 훌륭합니다! 그렇지 않은 경우 적어도 시도했습니다. 가비지 수집기가 수동으로 호출 할 때 가비지 수집기가 동작하는 방식에 예상치 못한 일을하는 고유의 부작용이 없다면 단순히 단점은 없으며, 이는 자체적으로 불신을 야기합니다.
- 일반적인 사용 사례는 아닙니다.
안정적으로 달성 할 수없는 유스 케이스이지만 시스템이 그러한 방식으로 설계된 경우 일 수 있습니다. 교통 신호등을 만들고 교통 신호등의 일부 / 모든 버튼이 아무것도하지 않도록하는 것과 같습니다. 버튼이 시작되는 이유에 대한 의문을 제기하고, 자바 스크립트에는 가비지 수집 기능이 없으므로 그것을 면밀히 조사하지 마십시오.
- 사양에 따르면 System.gc ()는 GC를 실행해야한다는 힌트이며 VM은이를 무시할 수 있습니다.
"힌트"란 무엇입니까? "무시"란 무엇입니까? 컴퓨터는 단순히 힌트를 얻거나 무언가를 무시할 수 없으며, 시스템의 의도에 따라 동적 일 수있는 엄격한 행동 경로가 있습니다. 적절한 답변은 가비지 수집기가 실제로 구현 수준에서 수행하는 작업을 포함하며, 이로 인해 요청시 수집이 수행되지 않습니다. 이 기능은 단순히 nop입니까? 어떤 조건이 충족되어야합니까? 이 조건들은 무엇입니까?
Java GC는 종종 당신이 믿지 않는 괴물처럼 보입니다. 언제오고 갈 것인지, 그것이 무엇을할지, 어떻게할지 모릅니다. 가비지 콜렉션이 명령별로 작동하는 방식에 대해 더 잘 알고있는 일부 전문가를 상상할 수 있지만 대다수는 단순히 "그냥 작동"하기를 희망하며, 불투명 한 알고리즘을 신뢰하여 작업을 수행하는 것은 실망 스럽습니다.
무언가를 읽거나 무언가를 배우는 것과 실제로 그것을 구현하는 것, 시스템 간의 차이점을 보는 것, 그리고 소스 코드를 보지 않고도 그것을 이용할 수있는 것 사이에는 큰 차이가 있습니다. 이것은 자신감과 숙달 / 이해 / 통제 감을 만듭니다.
요약하자면, "이 기능은 아무 것도하지 않을 수도 있으며, 언제 어떤 일을하고 언제 무엇을하지 않는지, 어떻게하지 않을 것인지, 왜하지 않을 것인지, 왜 그렇게하지 않을 것인지에 대해 자세히 설명하지 않을 것입니다." "그 뒤에 의도가 합리적 일지라도 그것을 시도하는 것은 단순히 철학에 위배된다는 것을 암시한다".
Java GC가 작동하는 방식대로 작동하는 것이 좋을 수도 있고 그렇지 않을 수도 있지만 이해하기 위해서는 GC가 수행 할 수있는 일에 대한 포괄적 인 개요를 얻기 위해 어떤 방향으로 가야하는지 실제로 이해하기가 어렵습니다. 언어의 목적은 행동을 철학적으로 제어하는 것이기 때문에 (특히 프로그래머, 특히 초보자는 특정 시스템 / 언어의 행동으로 인해 존재하는 위기에 빠지기 쉽기 때문에) 언어를 불신하는 것은 너무 쉬운 일이 아닙니다. 용인 할 수 있고 (그렇지 않으면 언어를 사용하지 않을 것입니다.) 제어 할 수없는 알려진 이유없이 제어 할 수없는 것들이 본질적으로 해 롭습니다.