2017-11-02 16 views
2

저는 Kotlin에 익숙하지 않습니다. AFAICT의 구문은 Int, Float 등의 객체 버전을 지원하며 Java의 해당 int 및 float 프리미티브가 없습니다. 그러나 가능한 경우 컴파일러 또는 JVM이 기본 유형을 사용하도록 최적화합니까? JVM이 원시 타입을 사용하는 대신 매번 객체를 생성해야하는 경우 게임 메인 루프에서 호출 된 함수에서 로컬 변수를 사용하면 GC 스터 터가 발생할 수 있습니다.Kotlin의 Float, Int 등은 JVM의 기본 제공 유형에 최적화되어 있습니까?

답변

1

인용 docs :

유형 중 일부는 특별한 내부 표현 할 수 있습니다 - 예를 들어, 숫자, 문자 및 논리 값이 런타임시 기본 값으로 표현 될 수있다 - 그러나 사용자에게 그들이 평범한 모습을 수업. 이 섹션에서는 숫자, 문자, 부울, 배열 및 문자열과 같은 Kotlin에서 사용되는 기본 유형을 설명합니다.

그래서 예, 컴파일러는 JVM primitive types이 런타임에 사용되는 방식으로 최적화합니다. 물론 예외가 있습니다 :

null이 가능한 숫자 참조 (예 : Int?)가 필요하거나 제네릭이 필요하지 않으면 Java 플랫폼에서 숫자가 실제로 JVM 기본 유형으로 저장됩니다. 후자의 경우 숫자는 박스로 표시됩니다.

소스 문서에도 힌트가 있습니다. Int :

부호있는 32 비트 정수를 나타냅니다. JVM에서는,이 형태의 nullable가 아닌 값은, 원시 형 int의 값으로서 표현됩니다.