programing

Java 7 컴파일 코드를 Java 8로 업그레이드하면 어떤 이점이 있습니까?

minecode 2022. 10. 2. 15:00
반응형

Java 7 컴파일 코드를 Java 8로 업그레이드하면 어떤 이점이 있습니까?

자바7을 사용하여 작성한 오래된 어플리케이션이 있습니다.Java 8 JRE에서는 정상적으로 동작합니다.Java 8 기능을 이용하기 위해 코드를 다시 작성할 예정은 없습니다.컴파일된 코드를 최신 Java 8 JDK로 업그레이드하면 기술적인 이점이 있습니까?

이 코드는 현재 Java 7에서 컴파일되어 있으며 최신 Java 8 JRE에서 이미 실행되고 있습니다.Java 8 런타임 개선으로 이미 혜택을 볼 수 있습니다.이 질문은 버전8에서 컴파일하여 Java 8에서 컴파일된 바이트코드를 실행함으로써 이점을 얻을 수 있는지 여부입니다.


또한 개발자 생산성 등 비기술적인 이점에는 관심이 없습니다.나는 그것들이 중요하다고 생각하지만 이 질문의 요점은 아니다.개발팀이 없는 생산 코드를 요청합니다.완전히 유지 보수 모드입니다.

내가 질문을 정확히 이해했다면, 당신은 그 바이트코드가 에 의해 생성되었는지 알고 싶어합니다.javacJava 8이 Java 7보다 '더 좋다'는 것입니다.

정답은 아마도 그렇지 않을 것입니다. 컴파일러의 버그를 지속적으로 수정하여 바이트 코드의 효율을 높일 수 있습니다.그러나 Java 8에 대한 이러한 수정으로 인해 속도가 크게 향상되지는 않을 것입니다. Changelog에는 버전 간의 2가지 주요 변경 사항만 나와 있습니다.

Oracle 웹사이트가 형편없어서 관련 버그 수정 목록을 얻을 수 없는 것 같습니다.javacOpenJDK의 모든 것을 망라하지는 않습니다.제가 찾을 수 있는 것 중 대부분은 오류 수정입니다.따라서 Java 8로 업데이트함으로써 다음 이유로 컴파일되지 않을 가능성이 있습니다.javacJLS를 보다 정확하게 따르며 바이트 코드의 "개선"은 거의 또는 전혀 없습니다.

주요 장점은 Java 8이 공식적으로 업데이트되지 않은 최신 버그 수정 기능을 가지고 있다는 것입니다.

또한 Java 8 JVM에서 코드를 실행할 경우 Java 버전을 하나만 설치하면 됩니다.

Java 8이 더 빠르고 G1과 같은 새로운 기능을 더 잘 지원합니다.다만, 사용 예에서는 시간이 걸릴 수 있기 때문에, 테스트하는 것 밖에 알 수 없습니다.

컴파일된 코드를 최신 Java 8 JDK로 업그레이드하면 기술적인 이점이 있습니까?

Java 8 컴파일러에서 Java 7 코드를 다시 컴파일하면 어떤 이점이 있는지 묻는다면 답은 거의 없습니다.

유일한 미묘한 차이는 Java API에 사소한 차이가 있다는 것입니다. 따라서 Java 8 컴파일러가 Java 7을 발견할 수 있는 매우 미묘한 차이가 있을 수 있습니다.

그 외의 사소한 차이는 파일 시작 부분의 매직 번호(상수 풀의 순서 등)입니다.바이트 코드는 기본적으로 동일합니다.또,invokedynamicJava 7에 람다용으로 추가되었지만 그렇게 사용되지 않았습니다.

인지도를 높이는 데 도움이 될 수 있습니다.

Java8로 전환하면 javac에서 추가 경고가 발생할 수 있습니다.: Java8에서는 유형 추론이 크게 개선되었습니다.이것에 의해, 현재의 코드 베이스에 @SuppressWarnings 어노테이션이 불필요하게 됩니다(또, 그러한 어노테이션이 불필요하게 되었을 경우는, 컴파일러가 경고합니다).

따라서 현재 코드 베이스를 변경할 생각이 없는 경우에도 Java8로 전환하면 이러한 사실을 알 수 있습니다.지식을 늘리면 정보에 입각한 의사결정에 도움이 됩니다.

한편, 다음과 같습니다.

  • Java8이 Java7 코드 컴파일을 거부한 (희귀한) 상황에 대해 여기서 몇 가지 질문을 보았습니다.따라서 Java8로 전환하면 이러한 문제에 직면할 위험이 (최소) 있습니다.
  • 또, 오늘 코드 베이스에 손을 대지 않는 경우에도, 나중에 마음이 바뀔 가능성이 있습니다.그 후 주의하지 않으면 Java8 기능을 이용할 수 있습니다.이렇게 하면 "필드 업데이트"가 복잡해질 수 있습니다. 이제 두 가지 버전의 소스 코드를 유지 관리해야 합니다.
  • 다음으로, 고객이 java7 jre를 사용하여 제품을 실행하고 있는 경우, 고객에게 제공하는 바이너리 수정에 매우 주의해야 합니다.이러한 설정이 있습니다.Java8 컴파일 클래스 1개를 Java7에 의한 테스트 시스템에 실수로 배치했기 때문에 몇 번이고 시간을 낭비했습니다.개발 및 테스트/고객 셋업이 모두 Java7인 경우에는 이 문제가 발생할 수 없습니다.

요약하자면, 몇 가지 미묘한 이점이 있으며, 특정 리스크(리스크의 중요성은 주로 전체 구성에 따라 다름)가 있습니다.

적어도 이 사실들을 위해서라면 그렇게 할 것이다.

1) HashMap 내부 (jdk-8에서 더 빠름)

2) 많은 버그가 수정되어 투명할 수 있습니다(런타임 최적화).실제로 아무것도 하지 않아도 코드를 고속으로 개선할 수 있습니다.

3) G1 가비지 콜렉터

편집

기술적인 관점에서 보면, 이것은 Foread of Time Compilation과 관련이 있거나 컴파일러가 코드를 더 분석함으로써 개선할 수 있는 것으로 들립니다.Java 8 컴파일러에서는 이러한 작업이 수행되지 않는 것으로 알고 있습니다.

개발자의 관점에서 보면, 많은 것이 있습니다.생산성 향상은 나에게 가장 중요한 것이다.

편집 2

두 번째 쿼리와 일치하는 두 가지 점만 알고 있습니다.

– 파라미터

메서드 파라미터 이름을 보존합니다.

-프로파일

콤팩트 프로파일 옵션이라고 불리는 공간 절약.

만약 당신이 당신의 어플리케이션을 다시 컴파일해야 할 다른 이유가 없다면, 그것은 아마도 받아들여진 답변에 명시된 바와 같이 큰 차이가 없을 것입니다.

단, 한 번만 다시 컴파일해야 하는 경우에는 다음 사항을 고려하십시오.

  • 애플리케이션 소스 코드는 Java 7과 호환되며, 대부분의 경우 8과도 호환됩니다.
  • 코드가 Java 8에서 컴파일되지 않을 경우 Java 7 소스 호환성 모드의 Java 8 컴파일러에서도 컴파일되지 않을 수 있습니다.-source 7javac 포함);
  • 개발자와 CI는 운영 환경에 최대한 근접하기 위해 Java 8 런타임에 대해 유닛 및 통합 테스트를 실행해야 합니다.또한 개발자는 애플리케이션을 로컬에서 실행할 때 동일한 Java 8 런타임에서 실행해야 합니다.
  • JDK 7을 사용하여 컴파일을 하고 JRE 8을 사용하여 실행하는 것은 (동일한 빌드 프로세스 또는 동일한 IDE로) 모든 것을 동일한 버전으로 실행하는 것보다 더 어렵습니다.
  • 를 사용해도 아무런 이점이 없습니다.-source 7대신-source 8JDK 8을 사용하여 컴파일하고 대상 실행 시간이 Java 8인 경우
  • 사용.-source 8개발자가 컴파일과 런타임 모두에 Java 8(또는 그 이후)을 사용하는 것을 보증합니다(강제 적용 시).-target 8).

결론적으로, 필요하지 않으면 다시 컴파일하지 마십시오.단, 코드 변경으로 인해 처음 컴파일을 해야 하는 경우에는 Java 8로 전환합니다.환경 미스매치로 인한 버그 위험을 감수하고 개발자를 정당한 이유 없이 제한하지 마십시오.

언급URL : https://stackoverflow.com/questions/42004363/is-there-any-benefit-to-upgrading-java-7-compiled-code-to-java-8

반응형