Resharper를 사용하기 시작했으며 메서드가 일 때이 정적 일 수 있다고 나타났습니다. 몇 백 가지 방법을 정적 메서드로 변환하면 장기간에 걸친 메모리 풋 프린트가 증가할까요?메서드를 정적 메서드로 변환 할 때 메모리 사용
답변
아니요 - 정적 메서드로 변경하면 메모리에 아무런 영향을 미치지 않습니다.
형식이 처음 참조 될 때 (정적인지 비 정적인지) 정적 멤버가 초기화되고 정적 생성자가 실행됩니다.
그러나 비 정적에서 정적으로 메서드를 전환하는 것을 고려하고 있다면 가비지 수집 또는 총 메모리 풋 프린트에 영향을주지 않습니다.
클래스 멤버를 정적 멤버로 변경하면 메모리 사용량이 변경 될뿐입니다. 이 경우 정적 필드는 유형에 액세스하면 뿌리를 유지하고 GC가 수집하지 않습니다. 이는 일반적으로 필요할 때만, 그리고 의도적으로 만 수행됩니다. 멤버를 정적으로 유지하려는 경우 정적으로 만듭니다.
JIT 컴파일러의 관점에서 정적 메서드와 인스턴스 메서드 사이에는 차이가 없습니다. 그들에 대한 기계어 코드는 매우 유사하며 같은 종류의 힙에 저장됩니다. 유일한 차이점은 인스턴스 메서드에 추가 인수가 있다는 것입니다.
메서드가 호출 될 때 추가 인수가 전달되어야합니다. 그러면 추가 기계 코드 명령어가 필요할 수 있지만 자주 그런 것은 아닙니다. CPU 레지스터 (ECX)는 이미 올바른 값을 가지고 있습니다. 인스턴스 메소드에 x86에서 하나 이상의 인수가 있거나 x64에서 세 개보다 많은 인수가있는 경우에는 차이가 있습니다. 추가 인수는 CPU 레지스터가 아니라 스택에 전달되어야합니다. 한가지 추가 지시.
최악의 경우, 당신은 1 나노초보다 조금 씩보고 있습니다. 마이크로 최적화의 일반적인 문제점 인 측정하기가 어려울 것입니다.
이것은 원래 질문의 범위를 벗어나지 만, 정적이거나 그렇지 않은 메서드가 호출 될 때 힙에 저장되는 것은 무엇입니까? 메소드 자체 또는 메소드를 포함하고있는 클래스의 인스턴스인가 아니면 다른 것인가? 가비지 수집으로이 메모리가 수집 되었습니까? –
메서드 호출 중에 아무 것도 힙에 저장되지 않습니다. 인수는 CPU 레지스터와 스택을 통해 전달됩니다. 아무것도 수집 할 필요가 없습니다. Petzold의 책 "Code"가 당신에게 흥미로울 수 있습니다. –
많은 의미가 있습니다. 그래서 정말로 정적이 아닌 정적에서 내 메서드를 변환하는 유일한 이유는 클래스 인스턴스화없이 액세스하는 것입니다? 귀하의 추천에 감사드립니다. –
- 1. 인스턴스 메서드로 Func 사용
- 2. 정적 상수 사용 - 메모리 정지? 우리가 정의 할 때
- 3. PHP : 부모로부터 정적 메서드를 호출 할 때 "정의되지 않은 메서드로 호출"오류가 발생했습니다.
- 4. C# 4.0에서 동적 메서드로 정적 메서드를 호출하는 방법은 무엇입니까?
- 5. 정적 메서드로 인스턴스 메서드 재정의
- 6. 캐스팅 할 때 메모리 사용? [C]
- 7. biztalk에서 사용하는 정적 메서드로 컴파일 된 쿼리
- 8. 정적 메서드를 처리 할 때 동일한 수준의 코드 유지
- 9. FXCop 규칙 자식 메서드로 인터페이스 메서드를 호출 할 수 있어야합니다.
- 10. ASMX에서 정적 메서드를 호출 할 때의 주의점
- 11. 클래스를 상속 받지만 대개 정적 메서드로 생성됩니까?
- 12. groovy mixin을 사용하여 정적 메서드를 추가하는 방법
- 13. 특성의 메서드로 스칼라 클래스 메서드를 재정의 할 수 있습니까?
- 14. Spring에서 정적 메서드를 가로채는 방법은 무엇입니까?
- 15. 정적 컨텍스트에서 비 정적 메서드를 참조 할 수 있습니까?
- 16. 정적 컨텍스트에서 비 정적 메서드를 참조 할 수 없습니다.
- 17. 일반 클래스의 메서드로 다른 클래스의 메서드를 설정하는 방법
- 18. 정적 방법 메모리 소비
- 19. ctor 또는 개인 정적 메서드로 컬렉션을 채워야합니까?
- 20. 정적 메서드로 환경 설정에 액세스하는 방법
- 21. 정적 메모리 할당 및 이식성
- 22. Java에서 정적 메서드를 동기화하는 방법
- 23. 정적 변수 메모리 파괴
- 24. 정적 라이브러리 효과 메모리 사용 대신 공유 라이브러리를 사용합니까?
- 25. 거대한 숫자 키를 추가 할 때 PHP 배열의 메모리 사용
- 26. Java (jUnit4)에서 정적 메서드를 쉽게 조롱 할 수 있습니다
- 27. 정적 클래스에 정적 메서드를 두는 것과 정적 클래스에 인스턴스 메서드를 넣는 것의 차이점은 무엇입니까?
- 28. 동적으로 결과를 생성 할 때 시간대 변환 사용
- 29. 정적 메서드를 정적이 아닌 메서드로 변환하는 방법 Java oop와 관련된 간단한 설명/예제
- 30. 정적 객체 메모리 해제
메모리의 아무 곳에 나 저장되는 정적 메서드 복사본이 있습니까? 내 가정은 정적 메서드를 참조하면 어딘가에 저장되고 이후의 각 참조는 해당 메서드의 인스턴스를 사용하지만이 가정은 잘못되었을 수 있음을 이해합니다. –
"메소드"는 정적 또는 인스턴스 메소드에 관계없이 프로세스 공간으로 가져 와서 JIT에서 컴파일 할 때 메모리에 한 번로드됩니다. 정적 및 비 정적 간의 메소드 사용에는 실제 차이점이 없습니다. 정적 메서드가 특정 경우에 적합한 지 여부에 중점을두고 메서드를 정적 메서드인지 인스턴스 메서드인지 결정하는 데 사용합니다. –
"this"포인터를 사용하지 않는 메서드에 "this"포인터를 전달하기 위해 여분의 코드가 생성되므로 메모리에 아주 작은 영향이 있습니다. – Qwertie