프로그램 성능향상 기법 - 시스템호출(System Call)의 사용빈도 감소, I/O집중에 따른 경합(Competition) 감소, Garbage Collection의 회피, Object 재사용, Method 호출 감소(Inline Method 사용)

CODEDRAGON Development/Software Engineering

반응형


 

 

프로그램 성능향상 기법

·       시스템호출(System Call) 사용빈도 감소

·       I/O집중에 따른 경합(Competition) 감소

·       Garbage Collection 회피

·       Object 재사용

·       Method 호출 감소(Inline Method 사용)

 

 

시스템호출(System Call) 사용빈도 감소

·       read/write 등의 System Call에는 많은 System Resource 사용됩니다. System Resource read/write 대상 총량이 아닌 호출빈도에 영향 받으므로, 즉시성 데이터가 아닌 경우 메모리버퍼 등을 구성하여 임계값 이상이 되었을 때에만 호출되도록 구성합니다.

·       동적자원할당(Memory Allocation, Object Creation ) 또한 System 많은 오버헤드를 유발하는 요소로서, 가급적 프로그램 기동 시에 Pre-Allocated Object 재사용하도록 구성하여 Run-Time 시에 동적으로 생성되는 경우가 적도록 구현합니다.

 

 

 

I/O집중에 따른 경합(Competition) 감소

공통 모듈의 일반적인 구성요소 “채번(Get Number) 기능의 구현 , 채번정보영역에 대한 동시접근으로 인하여 경합(Competition) 발생할 있습니다. 이러한 경합은 프로그램 실행상의 지연을 초래하므로, 경합 자체를 회피하거나(Sequence Object 등의 사용을 통해) 분산(경합대상을 세분화)시키는 방법을 사용하여 구현합니다.

 

 

 

Garbage Collection 회피

Object 생성시점에도 많은 오버헤드가 발생되지만, 생성된 Object 회수할때는 많은 오버헤드가 발생됩니다. 이를 위해 Static Method사용, 임시 Object 생성금지, Primitive Datatype 등을 사용하여 구현합니다.

 

 

 

Object 재사용

Object 재사용을 위해 Pool Management, Method 사용한 Object 초기화, Static Instance Variable 사용에 의한 단일 클래스 인스턴스를 구현합니다.

 

 

 

Method 호출 감소(Inline Method 사용)

Method Inline 의한 Method 호출을 감소시킵니다.

 

)

public class MethodTest {

int counter = 0;

 

public void method1() {

for (int i = 0; i < 1000; i++) {

addCount();

System.out.println("counter=" + counter);

}

}

 

public int addCount() {

counter = counter + 1;

return counter;

}

 

public static void main(String[] args) {

InlineMe im = new InlineMe();

im.method1();

}

}

 

아래와 같이 addCount() 수정하면, 컴파일 단계에서 Inline Method 변환되어서 실제로 Method를 호출하지 않으면서 같은 결과를 반환하게 됩니다.

public int addCount() {

counter = counter + 1;

}