이 질문은 단지 추측입니다. 내 상자에C++ 및 Java 성능
using namespace std;
void testvector(int x)
{
vector<string> v;
char aux[20];
int a = x * 2000;
int z = a + 2000;
string s("X-");
for (int i = a; i < z; i++)
{
sprintf(aux, "%d", i);
v.push_back(s + aux);
}
}
int main()
{
for (int i = 0; i < 10000; i++)
{
if (i % 1000 == 0) cout << i << endl;
testvector(i);
}
}
는,이 프로그램은 약에서 실행됩니다 :
나는 C++에서 다음과 같은 구현을 가지고있다. 12 초; 놀랍게도, 비슷한 구현을 Java [String 및 ArrayList 사용]하고 내 C++ 응용 프로그램 (약 2 초)보다 훨씬 빠르게 실행됩니다. ..., 너무 ++ C에서 구현 될 수 있도록
내가 네이티브로 변환 할 때 자바 핫스팟이 최적화를 많이 수행 알고 있지만, 이러한 성능은 자바로 할 수 있으면 나는 생각한다, 당신을 무엇 위의 프로그램에서 수정해야한다고 생각하거나, 사용 된 라이브러리 나 메모리 할당 자에서 이와 비슷한 퍼포먼스에 도달해야한다고 생각합니까? (이러한 것들의 실제 코드를 작성하는 것은 매우 길 수 있으므로 그것에 대해 논의하는 것이 좋습니다) ...
감사합니다.
코드가 컴파일되지 않는 것 같다. 이게 뭐야? – UncleBens
@UncleBens - 필요한'include' 지시문을 추가하십시오. –
int를 벡터 <**string**>으로 푸시하려고 시도하기 때문에 컴파일되지 않습니다. 일치하는 testvector (void)가 없습니다. n 개의 문자열 사본을 저장하는 경우 Java는 동일한 문자열에 대한 n 개의 참조를 저장한다고 가정합니다. 그 (것)들로 아무 것도 이제까지 끝나지 않기 때문에, 당신은 동일한 끈에 또한 포인터를 저장할 수 있었다 :'string s ("X-"); 벡터 (x, &s);'매우 빠를 것 같네요 :) –
UncleBens