오늘 우리는 가비지 콜렉션이 얼마나 오래 필요가 있는지 논의했습니다. 또한 1 기가 바이트의 메모리를 지우는 데 얼마나 오래 걸릴지 궁금해졌습니다. 무엇이 필요할까요? 내 컴퓨터에1GB의 메모리를 지우려면 얼마나 걸립니까?
답변
, 약 1 초 :
#include <stdlib.h>
#include <stdio.h>
const long long int NUM = 1024*1024*1024/8;
int main(void) {
long long int* ptr = malloc(NUM * sizeof ptr);
printf("Gigabytes: %lld\n",NUM * sizeof ptr/1024/1024/1024);
for(int i=0;i<NUM;i++) {
ptr[i]=1l;
}
}
내가 다음 (다음 실행 마지 못해 할당 시간을 측정, 너무 :
$ gcc -O3 -std=c99 mem.c -o mem
$ time ./mem
Gigabytes: 1
real 0m1.056s
user 0m0.205s
sys 0m0.845s
플러스 15 초, 분명히 그것을 할 프로그램을 입력합니다. +1 –
루프 풀기를 시도 할 수도 있습니다. – RickNZ
0x01의 7 바이트와 0x01 패턴의 1 바이트가 필요한 특별한 이유가 없으면 memset()을 사용하는 것이 좋습니다. –
하나는 그 1 GIG를 반환하는 기대 무료 풀에 메모리를 다시 사용하면 간단한 포인터 조작이 가능합니다 .GC는 일반적으로 반환 된 메모리를 지우지 않습니다.
1GB 메모리를 할당하는 데 소요되는 시간은 O를/S에서 시간에 무슨 일이 일어나고 있는지 - 당신은 페이지 테이블 등을 설정해야합니다 ...
여기에 많은 요소를 고려해야합니다. 범용 가비지 컬렉터가 링크를 해제 할 때 메모리를 정리하는 것은 의심 스럽습니다. 시간 낭비 일 것입니다. 플러스 가비지 콜렉션은 O (N)이되지 않는 경향이 있습니다. 가비지 수집은 일반적으로 실행되는 몇 가지 루틴을 가지고 있습니다. 여기에서 언급 할 수있는 가장 간단한 것은 압축이고, 압축 자체는 할당 된 메모리 분포 통계를 기반으로합니다.이
가 선택한 답은 가까이 그 느낌에 당신을 데려하지 않습니다 - - 아래의 댓글 후와 문제의 편집 - 사실 그것은 전적으로 오해의 소지가 다른 단계는
가 이.. 비슷한 복잡성을해야합니다 - 메모리 내 데이터 구조를 반복하지 않기 때문에. 그것은 가비지 컬렉터의 일이 아닌 단지 엄숙하게 메모리를 닦는 것입니다.
더 정확한 답변을
당신은 내가 .NET 또는 Java 응용 프로그램을 작성하고 무작위로 다음 객체의 크기를 다른 메모리의 공연 +를 초기화하고 제안 가비지 컬렉터에 대한 진정한 느낌을 얻을하고 싶다면 100-300MB의 물체를 떨어 뜨린 다음 다시 임의의 크기로 다시 만들 수 있습니다. 물건을 섞어주는 몇 번의 통과를 위해 이것을하십시오. 수집기를 사용하지 않고 개체의 가치를 떨어 뜨린 다음 수동 컬렉션을 강요하면됩니다. 이 마지막 수동 수집은 벤치마킹하려는 것입니다.이 작업을 100 번 정도 수행하고 결과를 계획하려고합니다.
주의 사항 20 일 MS
은 그게 당신이 원하는 어떤 경우 실시간 패턴으로 행동하는 콜렉터을 극복 할 수있는 방법이있다 확신합니다. 수집기는 전체 스윕을 수행 할 필요가 없으며 원자 적 연산 모음으로 수행하도록 작성 될 수 있으며 실시간 시간 초과 (예 : 20ms)에 수집 단계를 비활성화 할 수 있습니다. 이 경우 여전히 유용 할 부분 컬렉션을 수행했을 것입니다.
20ms에서 수행 할 수있는 양을 측정하려면 전술 한 전략을 조정해야합니다. 수집되는 양은 개체의 크기가 아니라 개체의 양에 더 의존적이라는 것을 이해해야합니다. 따라서 GC를 정식으로 테스트하기로 결정한 경우 두 값을 모두 캡처하는 것이 좋습니다.
필자는 얼마 전에 최근의 여러 데스크탑 모델에서 버스트 전송으로 테스트 한 메모리 대역폭을 측정하여 대략 초당 5 기가 바이트라는 일관된 숫자를 산출했습니다. Niko의 수와 아주 잘 어울리는데, 공연 시간은 0.205 초입니다. 0.845 초의 시스템 시간은 메모리를 사용할 수있게 만들 때 레코딩됩니다.하드 드라이브의 속도, 페이징 파일의 상태 및 메모리 대역폭보다 RAM에로드되는 다른 프로그램 페이지의 수와 관련이 있습니다.
즉, 측정하는 항목이 400 % 이상 벗어날 가능성이 있습니다. 때로는 훨씬 더.
(+1) 좋은 조언 : D. @jack은 테스트를 실행하기 전에 hd 스왑 영역 (Windows의 페이지 파일)을 비활성화하고 컴퓨터에 충분한 램을 가지고 있습니다. –
- 1. 활동을 시작하는데 얼마나 걸립니까?
- 2. Glibc는 컴파일하는데 얼마나 걸립니까?
- 3. CreateThread가 실행되기까지 얼마나 걸립니까?
- 4. 메모리를 지우려면 클래스를 설정하지 마십시오
- 5. 맞춤 이벤트가 표시되기까지 얼마나 걸립니까?
- 6. rabbitmq를 만드는 데 얼마나 걸립니까?
- 7. iPhone : 검색하는 데 얼마나 걸립니까?
- 8. jquery 바인딩을 설정하는데 얼마나 걸립니까?
- 9. 컨텍스트 스위치는 Linux에서 얼마나 오래 걸립니까?
- 10. "느린"게임 개발을위한 파이썬은 얼마나 걸립니까?
- 11. TDD가 더 쉬워 지려면 얼마나 걸립니까?
- 12. opencl을 호출하는 데 시간이 얼마나 걸립니까?
- 13. SHA-1은 해시 생성에 얼마나 걸립니까?
- 14. LINQ-to-SQL DataContext를 열려면 얼마나 걸립니까?
- 15. 역 DNS 조회는 얼마나 오래 걸립니까?
- 16. JSF - 약 1GB의 응용 프로그램 메모리 사용
- 17. 해시 테이블은 얼마나 많은 메모리를 사용합니까?
- 18. 얼마나 많은 메모리를 할당 할 수 있습니까?
- 19. 얼마나 많은 메모리를 UIImageView 320x480에 할당합니까?
- 20. malloc이 얼마나 많은 메모리를 할당했는지 추적합니다.
- 21. 내 자바 스레드는 얼마나 많은 메모리를 차지합니까?
- 22. 단일 쿼리에 대해 준비된 문은 얼마나 느리게 걸립니까?
- 23. 새 로그 소스가 적용 되려면 얼마나 오래 걸립니까? MSDN 상태에
- 24. Unix cat 명령을 실행하는 데 시간이 얼마나 걸립니까?
- 25. SQL Server 쿼리를 MySQL로 변환하는 데 얼마나 오래 걸립니까?
- 26. 콘텐츠가 게시 된 후 RSS 피드를받는 데 시간이 얼마나 걸립니까?
- 27. C++을 알고 있으면 Java를 배우려면 얼마나 걸립니까?
- 28. 서버에서 50 만 건의 레코드를 업데이트하는 데 시간이 얼마나 걸립니까?
- 29. 레이크 테스트를 실행하는 데 너무 많은 시간이 얼마나 걸립니까?
- 30. Google에서 R 301의 모든 링크를 업데이트하는 데 얼마나 걸립니까?
피자를 먹는 데 얼마나 걸립니까? 그것은 누가 그것을 먹고 있고, 어떤 크기와 종류의 피자인지에 달려 있습니다. 귀하의 질문에 똑같은 문제가 적용됩니다. – jball
아,하지만 아시다시피, 규모의 순서는 흥미로울 것입니다. 더 일 또는 나노초인가요? 그냥 느낌을 얻으려고. – Jack
memset을 호출하고 프로파일 러를 시작하는 데 몇 초의 노력이 필요합니다. –