2010-11-24 4 views
5

전산 효율에 대해 궁금합니다. 이 예제에서는 Java를 사용할 것이지만 일반적인 컴퓨팅 문제입니다. 내가 문자열을 가지고 문자열의 첫 문자의 값을 문자열로 얻고 싶다고하자. 그래서컴퓨팅 효율 질문

String firstletter = String.valueOf(somestring.toCharArray()[0]); 

을 할 수 아니면 내가 할 수있는 :

char[] stringaschar = somestring.toCharArray(); 
char firstchar = stringaschar[0]; 
String firstletter = String.valueOf(firstchar); 

내 질문은 두 가지 방법이 본질적으로 동일, 계산인가? 중간에 두 개의 변수를 만들어서 메모리 (스택?)에 임시로 저장해야한다는 두 번째 방법입니다. 그러나 첫 번째 방법 역시 컴퓨터가 암묵적으로 동일한 변수를 만들어야합니다. 맞습니까? 그리고 운영 횟수는 변하지 않습니다. 내 생각은, 두 가지 방법이 동일하다는 것입니다. 그러나 나는 확실히 알고 싶다.

+1

물론 이것이 실용적인 질문이라면, 그것은'String.charAt (int)'가 무엇인지에 대한 것입니다. – Actorclavilis

답변

1

이전 답변은 일치하고 올바르게 AFAIK입니다.

그러나 저는 컴퓨터 자산 (코드 등)의 효율성에 대해 궁금해 할 때마다 몇 가지 추가 고려해야 할 일반적인 고려 사항이 있다고 생각합니다.

첫째, 모든 것이 엄격한 제어하에있는 경우 원칙적으로 어셈블리 코드에서 하나씩 시계 사이클을 계산할 수 있습니다. 또는 좀 더 추상적 인 추론에서 연산/알고리즘의 계산 비용을 찾습니다.

지금까지 그렇게 좋았습니다. 그러나 나중에 측정 잊지 마세요. 실행 시간을 측정하는 것이 그리 쉽지 않고 때로는 쉽지 않은 경우도 있습니다 (예 : 인터럽트 처리, I/O 대기, 네트워크 병목 현상 ...). 그러나 그것은 지불합니다. 여기서 조언을 구하지 만 컴파일러/인터프리터/P- 코드 생성기/설정 스크립트의 세 번째 계층에서 THAT 스위치로 설정할 수있는 것은 무엇이든합니다.

다른 고려 사항은 현재 블랙 박스의 존재입니다. 당신은 세계에서 혼자가 아니며, 블랙 박스는 본질적으로 통제 할 수없는 코드를 실행하는 데 사용되는 조각입니다. 컴파일러, 운영 체제, 네트워크, 스토리지 시스템 및 세계는 일반적으로이 범주에 속합니다.

블랙 박스는 코드가 공개되지 않았거나 라이브러리 소스 코드를 파기하지 않고 우리의 자유 시간 낚시를 사용했기 때문에 검정색으로 표시됩니다. 작업. (BTW, This은 인간이 우리의 정신 모형을 어떻게 만들어 내는지에 대한 특별한 책입니다.) 그러나 당신은 항상 모형 인가 아니라는 것을 명심해야합니다. 모델은 우리가 일을 설명하는 데 어느 정도 도움이됩니다.상대 역학과 양자 역학이 불화 될 때까지 고전 역학이 통치되었습니다. 그들 중 누구도 틀리다 그들은 한계가이고, 그래서 우리의 모든 모델이 있습니다.

라우터 OS 또는 리눅스 커널과 친구가 되더라도 효율성 문제가 발생할 경우 실험을 실시하고을 측정하십시오.

HTH!

NB : 설계 좋은 실험 타르 핏을 조심하십시오. 예 : 실험 대상 대신 측정 코드를 측정하고, 외부 요인의 영향을받으며, 생산 코드에 영향을 줄 외부 요인을 잊어 버리고, 카디널리티, 직교성 또는 기타 등등이 "실제 세계"와 다른 데이터로 테스트합니다. 생산 및 테스트 클라이언트/서버 작업자 등을 잘못 매핑하는 등의 문제 등

그럼 코드를 확인하십시오. 결과는이 페이지에서 가장 흥미로운 것입니다.

4

대부분의 경우 두 가지 방법으로 동일하거나 거의 동일한 개체 코드를 생성해야합니다. 컴파일러 최적화는 일반적으로 두 번째 옵션의 중간 변수가 올바른 결과를 얻는 데 필요하지 않음을 감지하고 이에 따라 콜 그래프를 축소합니다.

+0

+1 콜 그래프입니다. – Fred

2

이것은 모두 Java 인터프리터가 런타임 실행을 위해 중간 언어로 코드를 변환하는 방법에 따라 다릅니다. 그것은 실제로 똑같은 바이트 코드가되도록 두 접근법을 변환하는 최적화를 할 수 있습니다.

+1

컴파일 된 바이트 코드를 검사하는 Java 도구가 있는지 기억이 나지 않습니다. C#에 존재한다는 것을 알고 있습니다. 물론 –

+0

에는 http://www.google.com.vn/search?q=java+bytecode+viewe가 있습니다. – phunehehe

2

둘은 본질적으로 동일해야합니다. 두 경우 모두 동일한 문자열을 배열로 변환하고 첫 번째 문자를 찾고 문자의 값을 가져옵니다. 컴파일러가 이들을 처리하는 방법에는 사소한 차이가있을 수 있지만 무시해야합니다.