[java] 최신 JRE 버전이 이전 JDK 버전으로 컴파일 된 Java 프로그램을 실행할 수 있습니까?

이것은 어리석은 질문 일 수 있지만 Java 버전 1.6 1.7 에서 컴파일 된 Java 프로그램 및 관련 라이브러리를 실행 하고 (일부 라이브러리는 1.6을 사용하여 컴파일되는 반면 1.7을 사용하여 컴파일 중임) 1.7 JRE에서 전체 프로그램을 실행하는 데 문제가 발생 합니까? ?



답변

Java 8에서 Java 1의 거의 모든 코드를 실행할 수 있습니다. Java 6 코드가 Java 8 런타임에서 실행되지 않을 이유가 없습니다.

흥미로운 점은 Java 1.4로 작성된 응용 프로그램의 경우 이후 런타임에서 실행할 때 속도가 빨라진다는 것입니다. 이는 Java가 “Java”로 알려진 언어뿐만 아니라 JVM (Java 가상 머신)도 지속적으로 발전하고 있기 때문입니다. 최신 JVM에서 예상 한대로 여전히 작동하는 10 년 이전의 소스 코드가 있습니다.

예를 들어 Java 5 VM을 대상으로 지정하려는 경우 Java 8 SDK 도구를 사용하여 수행 할 수 있습니다. 버전 5 VM이 버전 8 VM의 모든 기능을 지원하지 않을 수 있다는 점을 염두에두면 궁극적으로 지원할 대상 VM을 지정할 수 있습니다.

새로운 Java 8 런타임에 대해 Java 5로 작성한 코드를 방금 테스트했으며 모든 것이 예상대로 작동하므로 이제 더 강력한 언어와 런타임이 있더라도 과거의 투자를 계속 사용할 수 있습니다. 그 자체만으로도 Java는 기업을위한 훌륭한 개발 선택입니다.


답변

이미 대답으로 당신은 대부분 안전하고 대부분의 제품과 3 번째의 것입니다 단순히 작업의 라이브러리. 그러나이 존재 할 매우 드문 경우 바이너리 호환성 ( 이전의 JDK를 사용하여 컴파일 된 클래스 파일이 새로운 JVM에서 실행하는 데 실패 것들 ) JDK 버전 사이에 도입합니다.

버전 간 Oracle Java 비 호환성 공식 목록 :

호환성 도구

JDK 9 패키지 에는 호환성을 확인하고 더 이상 사용되지 않는 API를 코드 내에서 나열하고 대안 (!)을 제안하는 jdeprscan 이라는 도구가 있습니다. 대상 JDK 버전 ( JDK 9 , 8 , 76 에서 작동 함)을 지정할 수 있으며 대상 버전 과 관련된 비 호환성을 나열합니다.

라이브러리의 경우 추가 설명 :

합리적인 경험 규칙은 소프트웨어가 대상으로하는 JRE 버전에 대해 최신 안정 릴리스 버전의 라이브러리를 사용하는 것입니다. 분명히이 규칙에서 많은 예외가 있지만 일반적으로 공개적으로 사용 가능한 라이브러리의 안정성은 일반적으로 시간이 증가한다.

종속성의 버전을 변경할 때 당연히 API 호환성버전 관리 를 고려해야합니다.

다시 말하지만 가장 많이 사용되는 종속성에는 이러한 정보를 사용할 수있는 웹 페이지가 있습니다.

그러나 좀 더 모호한 것을 사용하는 경우 컴파일 된 종속성 내에서 어떤 JRE가 클래스인지 식별 ​​할 수 있습니다.

여기에 클래스 버전을 찾는 방법에 대한 훌륭한 답변이 있습니다. 먼저 JAR 파일의 압축을 풀어야 할 수 있습니다.


답변