kanqonj
77
2020-06-01 13:23:18
5
300

static 멤버의 JVM 메모리 저장공간이 궁금합니다...


안녕하세요

자바를 공부중인 학생입니다..

공부하던도중 해결되지 않는 문제가있어서 질문 남겨봅니다..

어떤글에는 static멤버가 Method Area에 저장된다고하고 또 어떤글에는 MetaSpace에서 저장된다고 하는데JVM구조를 보면 metaspace는 

Method Area와는다른곳인거같아서 어떤게 정답인지 알려주시면 감사하겠습니다..

0
  • 답변 5

  • citadel
    535
    2020-06-01 13:44:12

    8부터 MetaSpace로 옮겼습니다.

  • MWA_PE
    599
    2020-06-01 13:45:44 작성 2020-06-01 13:47:48 수정됨

    RuntimeDataArea가 MethodArea, HeapArea, StackArea, NativeStack.....이렇게 나뉘어져있는데.
    MethodArea는 StaticArea또는 ClassArea라고 부르기도 합니다.
    메인메소드의 클래스와 static변수가 바로 저 Method영역에 올라옵니다.


    HeapArea는 또 Eden,S01,S02,Old로 나뉘고...
    JDK7까지는 permanent영역이 heap에 존재했습니다.
    JDK8부터는 permanent영역은 사라지고 일부가 metaspace로 변경되었습니다.
    metaspace 영역은 NativeStack 영역에 포함되었습니다.

    (출처:https://code-factory.tistory.com/48)


  • kanqonj
    77
    2020-06-01 14:22:14

    혹시 그럼 기존에 있던 Method Area의 역할을 

    Metaspace가 모두 대체하는건가요??

  • MWA_PE
    599
    2020-06-01 15:01:02 작성 2020-06-01 15:08:54 수정됨

    JVM구동시 클래스로더가 *.class 를 메소드영역에 로드합니다.

    (클래스, 변수, Method, static변수, 상수 정보 등) metaspace랑 별개입니다

    1.7과 1.8의 JVM메모리 구조의 변화는 https://12bme.tistory.com/382 링크를 참고하시면됩니다.


  • 토마토바구니
    765
    2020-06-01 16:23:18

    Metaspace는 Permanent area를 대체 하는 것 입니다.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.