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를 초기화합니다.동시에 실례적인 구축을 클래스가 불러올 때 완성하기 때문에 선로에 우호적이다.내부 클래스를 사용하여 단리 모델을 완성하면 로드 지연을 할 수 있을 뿐만 아니라 동기화 키워드를 사용하지 않아도 되는 비교적 완선한 방법이다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.