java 디자인 최적화 사례 모델

단일 모드는 하나의 클래스가 하나의 실례만 있는지 확인하는 대상 생성 모드입니다.
자바 언어에서 이렇게 하면 두 가지 좋은 점이 있다.
1. 빈번하게 사용하는 대상에 대해 대상을 만드는 데 걸리는 시간을 생략할 수 있다.
2. new 조작 횟수가 줄어들기 때문에 시스템 메모리의 사용 빈도가 낮아진다. 이렇게 하면 GC의 압력을 줄이고 GC가 멈추는 시간을 단축한다.
단일 모드 세분화:
일.

public class Singleton{
  private Singleton(){
    System.out.println("Singleton.Singleton()");
  }
  
  private static Singleton singleton = new Singleton();
  
  public static Singleton getInstance(){
    return singleton;
  }
}
주의: 우선 단일 클래스는private 접근 단계의 구조 함수를 가지고 단일 클래스가 시스템의 다른 코드에 실례화되지 않도록 해야 한다.그 다음으로 singleton 구성원 변수와 getInstance () 방법은 static이어야 합니다.
이 단례류는 창설이 매우 간단할 뿐만 아니라 매우 믿을 만하다.유일한 단점은singleton에 대한 지연 불러올 수 없다는 것입니다. 예를 들어 단일 창설 과정이 느리기 때문에 구성원 변수가static로 정의되어 있기 때문에 jvm에서 단일 클래스를 불러올 때 단일 클래스도 만들어집니다. 그러면 단일 클래스에 사용되는 모든 곳에서 단일 클래스를 만들 것입니다. 단일 클래스가 사용되든 안 사용되든 상관없습니다.예:

public class Singleton{
  private Singleton(){
    System.out.println("Singleton.Singleton()");
  }
  
  private static Singleton singleton = new Singleton();
  
  public static Singleton getInstance(){
    return singleton;
  }
  
  public static void createString(){
    System.out.println("Singleton.createString()");
  }
}
2. 관련 함수의 호출 속도를 높이기 위해서는 게으른 로드 메커니즘을 도입해야 한다.

package com.luchao.singtonle;

public class LazySingleton {
  private LazySingleton() {
    System.out.println("LazySingleton.LazySingleton()");
  }
  private static LazySingleton lazyInstance = null;
  
  public synchronized static LazySingleton getInstance(){
    if(lazyInstance==null)
      lazyInstance = new LazySingleton();
    return lazyInstance;
  }
}
정적 변수singleton의 초기화 값은null로 시스템이 시작될 때 추가 부하가 없는지 확인합니다.getInstance() 방법에서 현재 실례가 매우 존재하고 존재하면 되돌아오고 존재하지 않으면 다시 한 번 실례를 만듭니다.getInstance () 는 동기화 방법이어야 합니다. 다중 스레드 환경에서 스레드 1이 하나의 예를 만들고 있습니다. 값을 부여하기 전에 스레드 2는 instance를null로 판단할 수 있기 때문에 스레드 2는 새로운 사례를 만드는 프로그램을 시작하여 여러 개의 사례를 만들 것입니다.
상기 실례는 단례로 실현되었고 지연 불러오기를 실현했지만 동기화 방법을 도입하여 다중 스레드 환경에서 첫 번째 단례 프로그램보다 훨씬 많은 시간을 소모했다.
3. 단일 모드는 내부 클래스를 사용하여 단일 창설을 유지합니다

public class StaticSingleton {
  private StaticSingleton() {
    System.out.println("StaticSingleton.StaticSingleton()");
  }
  
  private static class SingletonHolder{
    private static StaticSingleton ataticSingleton = new     StaticSingleton();
  } 
  
  public static StaticSingleton getInstance(){
    return SingletonHolder.ataticSingleton;
  }
  
}
Static Singleton이 불러올 때 내부 클래스가 실례화되지 않습니다. Static Singleton 클래스가 jvm에 불러올 때 단일 클래스가 초기화되지 않고 get Instance () 방법이 호출될 때 Singleton Holder를 불러와서 instance를 초기화합니다.동시에 실례적인 구축을 클래스가 불러올 때 완성하기 때문에 선로에 우호적이다.
내부 클래스를 사용하여 단리 모델을 완성하면 로드 지연을 할 수 있을 뿐만 아니라 동기화 키워드를 사용하지 않아도 되는 비교적 완선한 방법이다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기