2011-02-07 6 views

답변

3

전혀 아님!

Java는 추상 레벨의 거의 모든 부분을 C와 달리 실제 레지스터와 버퍼의 관점에서 실제로 코딩하는 하드웨어 및 메모리 또는 어셈블리에 직접 액세스 할 수 없습니다.

효율적인 Java 코드를 작성하려면 사용중인 알고리즘의 효율성을 확인하면됩니다. 비효율적 인 알고리즘을 사용하는 경우 프로그램에 상관없이 비효율적입니다. 올바른 유형의 데이터 구조를 사용하고 있습니다. 이것이 사람들이 어셈블리로 코딩하는 한 가지 이유입니다. 매우 유연한 데이터 구조를 만들 수 있습니다. 그러나 주류 목적을 위해, java.util에있는 클래스는 충분할 것입니다.

최신 기계에서는 가상 기계 사용으로 인해 발생하는 비용이 거의 들지 않으므로 Java는 어셈블리 나 C와 비교할 때 많은 단점이 없습니다.

어쨌든 Java와 어셈블리 코드를 함께 사용할 수 없으므로 언어 ​​지식이 도움이되지 않지만 효율적인 알고리즘 (정렬 등) 및 데이터 구조 (linkedlists, trees 등)에 대한 지식이 도움이됩니다.)

+1

이것은 오해의 소지가 있습니다. 언어와 마찬가지로 언어 런타임/구현에 대한 지식은 효율적인 알고리즘과 데이터 구조를 설계하는 데 필요합니다. Java의 경우 이것은 GC와 그 한계에 대한 기본적인 지식을 포함합니다. (약한 참조가 마음에 ...) – Christoph

+1

@Christoph 저수준 최적화의 의도와 프로그래밍이 복잡해지기 때문에 코드의 속도가 느려지는 것처럼 보입니다 (그리고 일반적으로 품질이 떨어지는 코드로 만드는 것보다). 깨끗한 코드와 측정은 가장 중요한 도구입니다. –

+0

@Tom : 나는 마이크로 최적화에 대해 이야기하는 것이 아니라 실행 환경의 본질적 속성에 대해 말하고있다. 대부분의 C 구현은 (현재의) 자바 스크립트에서 재귀 (반복적 인) 결정에 대한 반복을 선호한다. .in'은 배열을 반복 할 때'for (;;)'보다 느리다 (자바 최적화에서는 문장의 의미상의 차이로 인해 마이크로 최적화와 나쁜 예가 나타난다). 자바를 사용하면 언제, 왜 사용해야하는지 이해할 필요가있다. 'StringBuilder','WeakReference','ArrayList'와'LinkedList','volatile' 모두 구현의 속성과 관련이 있습니다 ... – Christoph

관련 문제