초기화는 싱글턴 클래스가 실제 로딩되는 시점까지 지연된다. 보통은 프로그램이 객체 인스턴스에 처음 접근할 때 초기화가 이뤄진다.
자바 vs. 코틀린 자바에서는 비공개 생성자와 정적(static) 상태를 조합한 일반적인 클래스 정의를 사용해 싱글턴을 에뮬레이션한다. 이런 객체 선언은 세부 구현 내용에 따라 특성이 달라지며, 보통은 지연 계산 싱글턴과 즉시 계산 싱글턴, 스레드 안전한 싱글턴과 스레드 안전하지 않은 싱글턴으로 구분할 수 있다. Application 객체의 JVM 바이트코드를 살펴보면 기본적으로 다음 자바 클래스와 같은 양의 코드를 볼 수 있다.
public final class Application { private static final String name = "My Application"; public static final Application INSTANCE; private Application() { } public final String getName() { return name; } public final void exit() { } static { INSTANCE = new Application(); name = "My Application"; } }