development

기본 스택 크기는 무엇이며 확장 할 수 있으며 가비지 수집과 어떻게 작동합니까?

big-blog 2020. 11. 15. 11:31
반응형

기본 스택 크기는 무엇이며 확장 할 수 있으며 가비지 수집과 어떻게 작동합니까?


각 스레드에는 고유 한 stack. 기본 유형 및 참조는 스택에 보관되며 객체는 스택에 보관되지 않습니다.

내 질문은 다음과 같습니다.

  • 스택은 얼마나 커질 수 있습니까? (매개 변수- Xms및- 와 같이 Xmx)
  • 성장을 제한 할 수 있습니까?
  • 스택에 기본 최소값과 최대 값이 있습니까?
  • 가비지 컬렉션은 스택에서 어떻게 작동합니까?

스택은 얼마나 커질 수 있습니까?

이름이 지정된 VM 옵션을 사용 ss하여 최대 스택 크기를 조정할 수 있습니다 . VM 옵션은 일반적으로 -X {option}을 사용하여 전달됩니다. 따라서 java -Xss1M최대 스택 크기를 1M로 설정하는 데 사용할 수 있습니다 .

각 스레드에는 하나 이상의 스택이 있습니다. 일부 JVM (Java Virtual Machine)은 Java 스택 (Java 메서드 호출)과 네이티브 스택 (VM의 네이티브 메서드 호출)을 하나의 스택에 넣고 M2NFrame으로 알려진 Managed to Native Frame을 사용하여 스택 해제를 수행합니다. 일부 JVM은 두 개의 스택을 별도로 보관합니다. Xss대부분의 경우 자바 스택의 크기를 설정합니다.

많은 JVM의 경우 서로 다른 플랫폼에서 스택 크기에 대해 서로 다른 기본값을 설정합니다.

이러한 성장을 제한 할 수 있습니까?

메서드 호출이 발생하면 해당 스레드의 스택에 새 스택 프레임이 생성됩니다. 스택에는 지역 변수, 매개 변수, 반환 주소 등이 포함됩니다. Java에서는 객체를 스택에 넣을 수 없으며 객체 참조 만 스택에 저장할 수 있습니다. 배열은 자바의 객체이기도하므로 배열도 스택에 저장되지 않습니다. 따라서 로컬 기본 변수, 매개 변수를 객체로 그룹화하여 양을 줄이면 스택 공간을 줄일 수 있습니다. 사실 자바 스택에 객체를 넣을 수 없다는 사실은 성능에 어느 정도 영향을 미칩니다 (캐시 미스).

스택에 기본 최소값 또는 기본 최대 값이 있습니까?

앞서 말했듯이 VM마다 다르며 버전에 따라 변경 될 수 있습니다. 를 참조하십시오 여기 .

가비지 컬렉션은 스택에서 어떻게 작동합니까?

Java의 가비지 콜렉션은 뜨거운 주제입니다. 가비지 수집은 에서 도달 할 수없는 개체를 수집하는 것을 목표로합니다 . 따라서 '연결 가능'의 정의가 필요합니다. 스택의 모든 것은 GC에서 루트 세트 참조의 일부를 구성합니다. 모든 스레드의 모든 스택에서 도달 할 수있는 모든 것은 라이브로 간주되어야합니다. Thread 객체 및 일부 클래스 객체와 같은 다른 루트 세트 참조가 있습니다.

이것은 GC에서 스택을 매우 모호하게 사용하는 것입니다. 현재 대부분의 JVM은 세대 별 GC를 사용하고 있습니다. 이 기사에서는 Java GC에 대한 간략한 소개를 제공합니다. 그리고 최근 에 .net에서 GC에 대해 이야기 하는 아주 좋은 기사를 읽었습니다 . oracle jvm의 GC는 매우 유사하므로 도움이 될 수도 있습니다.


말했듯이 지역 변수와 참조는 스택에 저장됩니다. 메서드가 반환되면 스택 포인터는 메서드가 시작되기 전의 위치로 다시 이동됩니다. 즉, 모든 로컬 데이터가 "스택에서 제거"됩니다. 따라서 스택에는 가비지 콜렉션이 필요하지 않으며 힙에서만 발생합니다.

구체적인 질문에 답하려면 :

  • 스택 크기를 늘리는 방법에 대한 이 질문참조하십시오 .
  • 다음과 같이 스택 증가를 제한 할 수 있습니다.
    • 객체에 많은 지역 변수 그룹화 : 해당 객체는 힙에 저장되고 참조 만 스택에 저장됩니다.
    • 중첩 된 함수 호출 수 제한 (일반적으로 재귀를 사용하지 않음)
  • Windows의 경우 기본 스택 크기는 32 비트의 경우 320k이고 64 비트의 경우 1024k입니다 . 이 링크를 참조하십시오 .

참고 URL : https://stackoverflow.com/questions/20030120/what-is-the-default-stack-size-can-it-grow-how-does-it-work-with-garbage-colle

반응형