이론상 예, 가능합니다. 그러나 연습해야합니다.
대부분의 Java 가상 시스템에서 응용 프로그램 스레드 만 실행중인 스레드가 아닙니다. 응용 프로그램 스레드 외에도 컴파일 스레드, 파이널 라이저 스레드, 가비지 수집 스레드 등이 있습니다. CPU 코어를 이러한 스레드에 할당하고 시스템에서 실행중인 다른 프로그램의 다른 스레드를 할당하는 결정은 많은 스레드 (스레드 우선 순위, 마지막 실행 시간 등)를 기반으로하며 모든 스레드에 공평하게 적용됩니다. 따라서 실제로 시스템의 쓰레드는 부당하게 오랜 시간 동안 CPU 할당을 기다리지 않아야하며 운영 체제는 무제한의 시간 동안 아무 스레드도 차단해서는 안됩니다.
가비지 콜렉션 스레드 (및 기타 VM 스레드)가 수행해야하는 최소한의 활동이 있습니다. 가비지 수집이 필요한지를 주기적으로 확인해야합니다. 응용 프로그램 스레드가 모두 일시 중단 된 경우에도 JIT 컴파일러 스레드 나 종료 기 스레드와 같은 다른 VM 스레드가있을 수 있으므로 작업을 수행하므로 개체를 할당하고 가비지 수집을 트리거합니다.특히 Java에서 VM 스레드를 구현하고 C/C++에서는 구현하지 않는 메타 원형 JVM의 경우에 특히 그렇습니다.
또한 대부분의 현대 JVM은 세대 별 가비지 수집기 (힙을 별도의 공간으로 분할하고 힙의 다른 부분에 다른 연령대의 객체를 넣는 가비지 수집기)를 사용합니다. 이는 객체가 오래되고 오래되면 필요하다는 것을 의미합니다. 다른 오래된 공간으로 옮길 수 있습니다. 따라서 객체를 수집 할 필요가없는 경우에도 세대 별 가비지 수집기가 객체를 한 공간에서 다른 공간으로 이동할 수 있습니다.
물론 각 가비지 컬렉터의 세부 사항은 JVM에서 JVM으로 다릅니다. 부상에 염분을 더 많이 넣기 위해 일부 JVM은 두 가지 유형 이상의 가비지 컬렉터를 지원합니다. 그러나 유휴 응용 프로그램에서 최소한의 가비지 수집 활동을 보는 것은 놀라운 일이 아닙니다.
_ "크롤링 속도가 느려지고 거의 동결됩니다."_ 메모리 누수가 있습니까? – phil
그래, 나는 그런 식으로 들리 겠지만 시간이 지남에 따라 사용 가능한 메모리가 줄어든다는 것을 알 수있다. 확실히 좋은 생각. –
Statement 객체가 절대로 닫히지 않고 잠시 후에 힙을 채 웠기 때문에 이전에 설명한 것과 같은 것을 보았습니다. VisualVM 또는 원하는 도구를 사용하여 대부분의 메모리를 사용하고 있는지 확인하고 계속 증가하는지 확인하십시오. – phil