일반 힙 할당과 동일한 방식으로 수집되지 않는 충분히 큰 개체가 Large Object Heap (LOH)에 할당됩니다. LOH의 객체는 정상적으로 압축되지 않으므로 조각난 메모리로 처리하는 것이 훨씬 쉽습니다. 따라서 프로세스가 많은 메모리를 사용하지 않아도 OutOfMemoryException
을 얻는 것이 훨씬 쉽습니다 (내 경험은 700MB였습니다). 대형 객체를 많이 다룰 때 32 비트 프로세스에서 이러한 조건을 쉽게 처리 할 수 있습니다.
미래의 할당에 대해 묻는 이유는 이것이 프로그램에서 기대하는 유일한 큰 개체이고 자주 다른 개체와 함께 재 할당되지 않는 경우 하나 또는 그 이상을 갖는 것이 아마도 큰 문제가 아니며 너에게 너무 많은 영향을 미치지 않을거야. 대용량 배열이나 큰 문자열과 같은 큰 개체를 갖는 것이 좋습니다. LOH를 요구하는 할당이 자주 발생하면 문제가 될 수 있습니다.
구조체와 개체. 객체는 분명히 배열의 너비를 포인터와 같은 크기, 즉 32 또는 64 비트로 만듭니다. 구조체는 배열 자체에 값으로 저장 될 수 있으므로 구조체가 더 큰 경우 요소 크기가 같은 동일한 크기의 배열이 바이트 단위로 커집니다. 따라서 요소 수가 적 으면 어레이가 LOH에 할당됩니다.
출처
2017-05-26 14:49:16
LB2
당신이 무엇을 요구하는지는 분명하지 않습니다. 클래스 대 structs 사용을 고려할 때, 당신의 주장이나 딜레마는 무엇입니까? 미래 할당에 대해 말하고 있지만 수명은 적용 기간이므로 배열의 미래 재 할당은 적용되지 않습니다. – LB2
@ LB2 내 질문의 주요 특징은 작은 클래스의 큰 배열의 GC 의미입니다. 제가 제공 한 컨텍스트는 당신이 정말로 필요하지 않은 부수적 인 정보였습니다. 프로파일 링을 통해 알고리즘이 구조체 대신 클래스의 큰 배열에서 더 잘 작동하고 뭔가를 간과하지 않도록하고 싶습니다. 할당 명세서는 일반적으로 새로운 할당에 적용됩니다. 큰 클래스의 배열에만 해당하는 것이 아닙니다. – Slight