2017-10-11 1 views
3

나는 그레이 빙 수집 알고리즘의 작동 원리를 이해하려고합니다. 나는 이것을 article으로 읽고있다. 내가 알기 엔 각 할당이 일어나고있다 젊은 세대. 사용 가능한 공간이 충분하지 않으면 Minor GC이 발생하여 젊은 세대 (Eden, S1, S2)를 청소합니다. 메모리 할당 및 Java GC 이해

public class TestYoungCrash{ 
    private long l1; 
    private long l2; 
    //... 
    private long l100000000; 
    //tons of other fields 
} 

그래서 클래스의 객체가 생성이 완전히 명확하다하더라도 젊은 세대에 맞지 않는 :하지만 지금 우리는 같은 몇 가지 클래스가 상상한다.

그 다음에 어떻게됩니까? 그것은 표준화되어 있습니까?

답변

5

같은 양의 메모리가 필요한 단일 개체를 가질 수 없습니다. 그러나 때문이 아니라 메모리 한계,하지만 더 실용적인 이유 - JVM이 클래스 당 필드의 수를 제한 here을 참조하십시오 클래스 또는 인터페이스에 의해 선언 될 수 필드의 수는 65535로 제한됩니다

ClassFile 구조체의 fields_count 항목 크기 (§ 4.1).

클래스에서 메모리를 날려 버릴 수있는 필드를 너무 많이 가질 수 없습니다. 나는 꽤 확신한다 : 힙이 너무 작아서 65535 개의 긴 필드를 포함하는 단일 객체가 적합하지 않은 JVM을 시작하면 JVM이 시작되지 않을 가능성이 높다.

그런 의미에서 질문을 다시 할 수 있습니다. JVM에 제공된 힙 공간에 맞추기에는 너무 큰 배열을 만들면 어떻게됩니까? 그리고 나서 당신은 기본적으로이 question ...로 돌아갑니다 ... 어떤 말 : OutOfMemoryError.

+0

Young Generationg의 크기를 조정할 수 있습니까? –

+0

실제로 합리적이라고 생각합니다. 고맙습니다. –

+0

당신은 대단히 환영합니다 ;-) – GhostCat