programing

Apple M1 칩용 Java/JDK

firstcheck 2022. 7. 3. 19:50
반응형

Apple M1 칩용 Java/JDK

새로운 Apple M1 칩을 지원하려면 OpenJDK의 특별 릴리스가 필요합니까?

현재 MacOS/OS X용 JDK 다운로드가 있지만 x86 프로세서 전용인 것 같습니다.그것이 맞습니까?그렇다면 M1용 OpenJDK 버전은 어디서 다운로드할 수 있습니까?

네.

이 페이지:AdapteOpenJDK Latest Releases는 '운영체제' 드롭다운에서 'macOS'를 선택하고 '아키텍처'에서 현재 x64이지만 곧 AArch64 또는 ARM64가 등장할 것입니다(이것들은 64비트 ARM의 쇼트 코드이며 M1에 내장되어 있는 것이 확실합니다).

operating system을 「any」로 해 두면, aarch64가 들어가 있어 ARM 프로세서용의 Linux 릴리스가 표시됩니다.M1 하드웨어의 macOS에서는 실행되지 않을 가능성이 높지만, 이는 이미 수행된 작업의 95%입니다.

즉, ARM용 JDK는 아직 출시되지 않았지만, JDK 15는 10년 이상 전부터 많은 OS/아키텍처 조합(Solaris )에 대한 지원을 중단하고 있지만, ARM 개발은 항상 부분적으로만 관련이 있습니다(대부분 Oracle 상용 라이센스 제품일지라도).즉, 다음과 같습니다.M1에서 네이티브로 동작하는 adaptopenjdk 릴리스를 작성하는 것은 어려운 작업이 아니므로 아마 그렇게 될 것입니다.다만, 오픈 소스이기 때문에, 불안하다면, 꼭 읽어 주시고, 투고해 주세요.

애플은 2020년 11월 10일까지 이 아키텍처에 대한 자세한 내용을 전혀 밝히지 않았습니다. 단, 개발 키트 박스(M1 칩은 아니지만 충분히 가까운 A14 칩을 탑재한 Mac Mini)를 구입하고 대규모 NDA에 서명하지 않으면 말입니다.

일반적으로 NDA를 흔들면 오픈소스 프로젝트는 반대 방향으로 최대한 빠르게 진행되기 때문에, 이 상황이 싫다면, JDK나 다른 패키저나 오픈소스 프로젝트에 불만을 제기하는 것은 현명하지 않다고 생각합니다.

다행히 지금은 출시되었으며 NDA는 더 이상 필요하지 않습니다.OpenJDK 소스 코드와 macOS x64 릴리스에 이미 존재하는 macOS 비트의 ARM 브랜치는 OpenJDK 소스 코드를 테스트하기 위한 M1 기반 macOS 시스템을 가지고 있는 사람이 있으면 쉽게 결합할 수 있습니다. 즉, adaptopenjdk와 arch 64 릴리스가 mon에 포함되어 있어야 합니다.제1탄입니다.

하지만 오픈 소스.당신은 그들에게 돈을 지불하지 않았고, 당신은 계약도 없으며, 그들은 당신에게 빚을 지지 않습니다.작업을 더 빨리 진행하려면 작업에 기부하거나 풀 요청을 제출하십시오.

갱신:

  • Azul의 M1 OpenJDK 빌드
  • AArch64의 MacOS용 OpenJDK16 빌드에 대한 마이크로소프트의 (네, 정말) GitHub 소스 리포트입니다.Microsoft는 AArch64(ARM 기반 Windows 10용)의 OpenJDK 브랜치를 한동안 사용해 왔습니다.이것은, 「많은 힘든 작업이 이미 행해졌습니다.」로 거슬러 올라갑니다.

명령줄 어프로치(Homebrew 팀 및 지사 내 기타 openjdk 참여자의 노력 덕분)

# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install OpenJDK
brew install openjdk

인스톨 되어 있는 것을 확인합니다.

$(brew --prefix openjdk)/bin/java --version

Arm64 하드웨어용임을 확인합니다.

file $(brew --prefix openjdk)/bin/java     
# /opt/homebrew/opt/openjdk/bin/java: Mach-O 64-bit executable arm64

메모: 시스템 전체에 openjdk를 설치하려면 Homebrew에서 제공하는 화면의 지시에 따르십시오.

Azul은 다운로드 섹션의 웹 사이트에서 OpenJDK의 macOS ARM 빌드를 제공하고 있습니다.아직 시험해 본 적은 없지만, Azul은 오랫동안 JDK 개발자로 활동해 왔습니다.

JDK를하면, 「Azul JDK」, 「Azul JDK」가 까지, 그 뒤져야 .zulu-11.jdk11을 를 「JDK 11」에 합니다./Library/Java/JavaVirtualMachines.

sdkman을 사용하여 Java JDK를 설치할 수 있습니다(sdkman 설치 참조).

vim .sdkman/etc/config

★★sdkman_rosetta2_compatible=false(sdkman 구성 참조)

그 후에, M1 JDK 와 호환성이 있는 의 리스트가 표시됩니다.

sdk list java

================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Azul Zulu     |     | 16.0.1       | zulu    |            | 16.0.1-zulu
               |     | 11.0.11      | zulu    |            | 11.0.11-zulu
               |     | 8.0.292      | zulu    |            | 8.0.292-zulu
 BellSoft      |     | 16.0.1       | librca  |            | 16.0.1-librca
               |     | 11.0.11      | librca  |            | 11.0.11-librca
               |     | 8.0.292      | librca  |            | 8.0.292-librca
 Java.net      |     | 18.ea.3      | open    |            | 18.ea.3-open
               |     | 18.ea.2      | open    |            | 18.ea.2-open
               |     | 18.ea.1      | open    |            | 18.ea.1-open
               |     | 17.ea.28     | open    |            | 17.ea.28-open
               |     | 17.ea.27     | open    |            | 17.ea.27-open
               |     | 17.ea.26     | open    |            | 17.ea.26-open
               |     | 17.ea.25     | open    |            | 17.ea.25-open
================================================================================

합니다.sdk install java IDENTIFIER (예:

sdk install java 8.0.292-zulu

현재 Oracle의 OpenJDK 17은 Apple M1 칩을 지원합니다.JEP 391의 상태는 폐쇄되어 배송되었습니다.

JDK 버전 17의 무료 macOS/AArch64 오픈 소스 빌드는 공식 웹사이트에서 다운로드할 수 있습니다.

brew install openjdk

후 우우치 in in in inopenjdk M1이 으로 동작하고 있습니다.java명령어가 아직 기능하지 않습니다.는 그것을 는는으로 고친다.

brew info openjdk

그리고 다음과 같은 명령어가 있습니다.

For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

이 명령 및 Java 명령 작업 실행

저는 Azul OpenJDK와 NetBeans를 탑재한 새로운 Apple M1 Chip 상에서 Java 어플리케이션을 성공적으로 개발하고 있습니다.

설정:

  • zulu16.0.65-ea-jdk16.0.0-ea.24-harch64
  • NetBeans 12.1 및 Maven.

다음 단계를 따라 Mac M1에서 JDK 16을 성공적으로 실행할 수 있었습니다.

  1. "Oracle.com"에 접속합니다.
  2. 제품 → 소프트웨어Java이동합니다.
  3. "Java 지금 다운로드"를 클릭합니다.
  4. "JDK 다운로드"를 클릭합니다.
  5. "macOS Installer"를 선택합니다.
  6. JDK 설치
  7. 임의의 샘플 Java 프로그램을 사용해 보십시오.이렇게 하면 도움이 될 겁니다.

Mac M1에 설치하고 정상적으로 실행할 수 있었습니다.

Azul JDK 8을 써봤어요.

Azul JDK는 Apple M1에서 네이티브로 동작하고 속도도 좋지만, 아직 문제가 있습니다.특히 일부 Java 코드가 C++ 코드를 호출해야 할 경우.

예를 들어, 저는 빅데이터 개발자입니다.그리고 개발 워크플로우에 Azul JDK를 사용하기 시작했습니다.하지만 전환 후 특정 테스트가 실패하기 시작했음을 알 수 있습니다.예를 들어 Parquet/Avro 파일에 쓸 때 테스트가 실패합니다.그것은 Parquet/Avro의 네이티브가 C++로 기재되어 있고, M1의 네이티브가 아니기 때문이라고 생각합니다.

이 때문에, M1 이외의 JDK를 사용하지 않을 수 없게 되어 버렸습니다.거기에는 문제가 없습니다.

다음은 Azul에서 발생하는 M1 이외의 JDK에서는 발생하지 않는 오류의 예입니다.

- convert Base64 JSON back to rpo Avro *** FAILED ***
  org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 10.0 failed 1 times, most recent failure: Lost task 0.0 in stage 10.0 (TID 14, localhost, executor driver): org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64
        at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331)
        at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171)
        at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152)
        at org.xerial.snappy.Snappy.<clinit>(Snappy.java:47)
        at org.apache.avro.file.SnappyCodec.compress(SnappyCodec.java:43)
        at org.apache.avro.file.DataFileStream$DataBlock.compressUsing(DataFileStream.java:358)
        at org.apache.avro.file.DataFileWriter.writeBlock(DataFileWriter.java:382)
        at org.apache.avro.file.DataFileWriter.sync(DataFileWriter.java:401)
        at org.apache.avro.file.DataFileWriter.flush(DataFileWriter.java:410)
        at org.apache.avro.file.DataFileWriter.close(DataFileWriter.java:433)
        at org.apache.avro.mapred.AvroOutputFormat$1.close(AvroOutputFormat.java:170)
        at org.apache.spark.internal.io.SparkHadoopWriter.close(SparkHadoopWriter.scala:101)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$12$$anonfun$apply$5.apply$mcV$sp(PairRDDFunctions.scala:1145)
        at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1393)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$12.apply(PairRDDFunctions.scala:1145)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$12.apply(PairRDDFunctions.scala:1125)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
        at org.apache.spark.scheduler.Task.run(Task.scala:108)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Driver stacktrace:
  at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1499)
  at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1487)
  at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1486)
  at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
  at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
  at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1486)
  at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814)
  at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814)
  at scala.Option.foreach(Option.scala:257)
  at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:814)
  ...
  Cause: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64
  at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331)
  at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171)
  at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152)
  at org.xerial.snappy.Snappy.<clinit>(Snappy.java:47)
  at org.apache.avro.file.SnappyCodec.compress(SnappyCodec.java:43)
  at org.apache.avro.file.DataFileStream$DataBlock.compressUsing(DataFileStream.java:358)
  at org.apache.avro.file.DataFileWriter.writeBlock(DataFileWriter.java:382)
  at org.apache.avro.file.DataFileWriter.sync(DataFileWriter.java:401)
  at org.apache.avro.file.DataFileWriter.flush(DataFileWriter.java:410)
  at org.apache.avro.file.DataFileWriter.close(DataFileWriter.java:433)

되어 있습니다. Cause: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64

이 호를 검색했더니 유감스럽게도 네이티브 라이브러리가 Spark의 최신 버전을 위해 컴파일되어 있다고 합니다.

이 때문에 매우 당황스러웠습니다.그리고 지금 당장 Windows 노트북을 갖고 싶습니다.LOL.M1 칩에서 인텔 JDK를 실행하는 것은 때때로 느릴 수 있습니다.그리고 저는 그것을 원하지 않습니다.

조심해!

업데이트: 그들은 M1을 지원하는 새로운 버전의 라이브러리를 출시했고, 나는 그것들을 프로젝트에서 업데이트했고, 모든 것이 잘 작동했습니다.이러한 「네이티브 코드 에러」는, 다른 예외로 나타나는 경우가 있습니다.이것은 Windows 노트북의 동료가 대처할 필요가 없는 경우에 대처해야 하는 추가 P.I.T.A입니다.오류가 불분명할 수 있지만 오류 로그에 네이티브 코드나 "jna" 또는 "jni"와 같은 단어가 나타나면 M1 칩의 문제입니다.

Azul 사이트로 이동하여 .dmg 파일을 다운로드하십시오.

https://www.azul.com/downloads/zulu-community/ ? os = arms & architecture = arm-64-bit & arms = jdk

이것은 라이브러리에 배치되어 IntelliJ IDEA가 식별되면 실행하기에 좋습니다.

JEP-391 뿐만이 아닙니다.

프리뷰 브랜치(https://github.com/openjdk/jdk-sandbox/tree/JEP-391-branch,)는 인텔 Mac 또는 ARM Mac에서 직접 크로스 컴파일을 사용하여 JDK 16 얼리 액세스(EA)를 구축할 수 있습니다.그리고 그것은 잘 돌아간다.

Liberica JDK는 다음 사이트에서 다운로드할 수 있습니다.

https://bell-sw.com/pages/downloads/ os = macOS & architecture = ARM

IntelliJ IDEA for M1에서는 JetBrains 런타임도 네이티브(ARM64)입니다.

MicrosoftAzul 는, Windows 포토(JEP 388)와 조합해 JEP 391 의 원동력이 되고 있는 것 같습니다.이들은 macOS-arch64용 EA 릴리즈를 가진 별도의 GitHub 저장소를 가지고 있다.

OpenJDK 저장소와의 정확한 관계는 알 수 없습니다.

다음은 Oracle JDK 8을 설치하고 Rosetta에서 실행하는 단계입니다.https://www.oracle.com/in/java/technologies/javase/javase-jdk8-downloads.html

  • MacOS x64 버전 다운로드
  • 패키지를 설치하려고 하면 Rosetta가 존재하지 않으면 설치하라는 메시지가 나타납니다.
  • 나머지 설치 단계는 다른 패키지와 동일합니다.

터미널을 열고 다음을 입력하여 작동 여부를 확인할 수 있습니다.

java -version

Mac M1용 최신 빌드를 지금 이용하실 수 있습니다.

https://www.oracle.com/java/technologies/downloads/ #jdk18-mac

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/64788005/java-jdk-for-the-apple-m1-chip

반응형