[F-lab 모각코 챌린지 63일차] TIL

JeongheeKim·2023년 8월 2일

TIL

목록 보기
63/66

학습계획


  • 자바성능 이야기 1,2장
  • 데드락, 선점 & 비선점 스케쥴링 복습

Today I Learned


❓VO객체를 사용한다고 해서 성능이 좋아지는건 아닌데, 사용함으로써 무엇이 좋은가?

반복적인 데이터 요청(메세지)전달을 위해 데이터를 담을 용도로 재활용 되어 반복적인 데이터를 담을 객체를 생성하지 않아도 된다.

  • 응답 시간 프로파일링
    응답 시간 측정 목적
    하나의 클래스 내에서 사용되는 메서드 단위의 응답 시간 측정
    응답 시간 프로파일링을 통해 CPU시간과 대기시간 제공받는다.

  • 메모리 프로파일링
    - 목적
    GC대상이 적용되는 부분, 메모리 부족 현상 부분 찾기 위함

  • CPU시간 & 대기 시간
    하나의 메서드, 한 라인을 수행하는데 소요되는 시간은 무조건 CPU시간과 대기시간으로 나뉜다.
    CPU시간 + 대기시간 = 실제 소요 시간

    • CPU시간
      CPu를 점유한 시간
      - 대기시간
      CPU를 점유하지 않고 대기하는 시간

  • 데드락이란?
    • 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황
    • 데드락 조건
      • 비선점
        • 다른 프로세스의 자원을 뺏을 수 없음
      • 순환대기
        • 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 관계가 순환적 구조
      • 점유대기
        • 공유 자원에 대한 접근 권한을 가진채로 다른 자원에 대한 접근
      • 상호배제
        • 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 접근 권한이 제한적일 경우
  • 선점, 비선점형 스케줄링
    • 선점형 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있다.
    • 비선점형은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음을 말합니다.

인터페이스를 활용해 실제 서비스 객체가 가진 메서드와 같은 이름의 메서드를 proxy 클래스(대리자)에 사용

  • proxy클래스는 실제 서비스에 대한 참조변수를 갖는다.

인터페이스를 서비스 객체가 들어갈 자리에 대신 투입해 클라이언트쪽에서 실제 서비스 객체를 통해 어떤 메서드를 호출 받는지 모르게 한다.

  • 프록시 패턴은 실제 서비스 메서드의 반환값에 가감하는것을 목적으로 하지 않고 제어의 흐름을 변경하거나 다른 로직을 수행하기 위해 사용
public interface IService {
	String **runSomething();**
}
public class Service implements IService {
	public String runSomething() {
		return "서비스짱";
	}
}
public class Proxy implements IService {
	IService service1;
	public String runSomething() {
		System.out.println("호출에 대한 흐름 제어가 주목적, 반환 결과를 그대로 전달");
		service1 = new Service();
		return service1.runSomething();
	}
}
public class ClientWithProxy {
	public static void main(String[] args) {
		Iservice proxy = new Proxy();
		System.out.println(proxy.runSomething());
	}
}

0개의 댓글