Java 및 C++에서 작은 테스트를 실행하여 매우 작은 오브젝트 (클래스 멤버가 없으며 생성자가 없음)를 많이 생성했으며 Java가 분명 더 빠릅니다 (C++이 실제로 느린 것 같습니다). 나는 이것이 JVM과 관련이 있다고 생각하지만 어떤면에서?C++ 힙 할당이 Java 힙 할당에 비해 느린 이유는 무엇입니까?
편집 :
class foo{
public:
foo(){}
~foo(){}
}
을 그리고 자바 : C++로 (I 더 반원, 아무것도 생성자에서 수행하지 말했듯이) 내가 사용
클래스는 다음과 같이했다
public class Foo{
public Foo(){}
}
내가 만든 작은 테스트는 단지 루프 (arround 1000000000 연속)에 많은 수의 객체를 할당하는 것이 었습니다. OpenJDK 구현을 통해 GCC 4.7.2 및 Java 1.7을 사용했습니다. 둘 다 Linux를 사용하는 동일한 시스템에서 구현되었습니다.
실제로 메모리 풀 할당과 관련이 있는데, 이는 JVM이 불필요한 메모리를 소유하고 있음을 나타냅니다.
실제로 JVM이 포인터 참조를 계산하고 메모리를 할당하는 속도가 느릴 것이라고 생각하기 때문에 혼란 스럽습니다.
이 질문은 대답 할 수 없습니다. 그것은 C++ 컴파일러, JVM 버전, 벤치 마크 프로그램, 플랫폼 등에 따라 다릅니다. –
핫스팟 (사용하고 있다고 가정)은 최적화 런타임입니다. 객체 메모리 할당은 이제 매우 빠르며, 무료입니다. 그러나, 나는 당신의 C++ 코드 나 어떤 컴파일러 구현을 사용하고 있는지 보지 못했기 때문에 그것이 얼마나 최적인지에 대해 언급 할 수 없다. –
사과와 사과를 비교하지 않습니다. JVM은이 상황을 위해 미리 할당 된 메모리 풀을 사용합니다. C++은 그러한 구조에 대해 미리 빌드 된 기능을 가지고 있지 않으며 대신 _every_ 할당을 위해 OS 메모리 관리자를 쿼리합니다. 사람들이 C++에서 JVM이 무엇을하는지 (메모리 풀 할당 자)를 제공하는 시스템을 작성하는 것은 드문 일이 아닙니다. 또한, 이것은 합법적 인 질문이며 모든 downvotes 학사입니다. – David