LoginSignup
3
0

More than 3 years have passed since last update.

Scalaを使う人のJavaアップデート

Posted at

動機

定期的なバージョンアップはしないと...というのと、
Java11以上への更新はどうやら魅力的なパワーアップが多いようだった。(もちろんバージョンアップは毎回魅力的だけどね!)
Java 11 に移行する理由 - Azure | Microsoft Docs

環境

  1. アプリケーションはScalaを書いてJVMで動かしている。
  2. Scalaは2.13.1を使っている。
  3. AdoptOpenJDKを利用している。
    • 今回アップデートしたいのはアプリケーションランタイムのバージョン。

ScalaとJVMバージョンの組み合わせ確認

まずはここでScalaとJVMのバージョン
https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html
We generally recommend JDK 8 or 11 for /compiling/ Scala code.
とありますが、今回はアプリケーションランタイムのバージョンが目的なのでとくに気にせず。

Scalaのバージョン的には11,12,13, 14 (15もあるが当時はまだ未リリース) で利用ができそうなコトがわかった。

目指すJavaバージョン

巷にはJava8 -> Java11への移行の情報が溢れていたので今回のアップデートではひとまずJava11を目指すことにした。

いろんな記事やブログを読んで回ったが
Java 8 から Java 11 への移行 - Azure | Microsoft Docs
が参考になった。

Scalaを利用しているのでアプリケーションから直接JavaのAPIを利用することは少ないのでほとんどなにもしなくても良かったがいくつか対応があったので以下でピックアップ

GCオプションの確認

下にある通りです。
Java 8 から Java 11 への移行 - Azure | Microsoft Docs
今回アップデートしたアプリケーションはG1GCだとパフォーマンスがParallel GCより劣るような、ヒープサイズとCPU数、アプリケーション特徴の場合は見逃していると性能下がって驚いてしまうので必ず確認しよう。

利用していたライブラリから An illegal reflective access operation has occurred

利用していたライブラリから
An illegal reflective access operation has occurred
が発生してログが出ていた。
私はJavaの起動オプションに--illegal-access*=warnとつけてwarnログとして残すことにした。
Java 8 から Java 11 への移行 - Azure | Microsoft Docs

Jetty ALPN Agent からの卒業

作業中に以下に遭遇した
Jetty-alpn 8.1.13 is incompatible with the latest jdk8u252-ga build · Issue #30 · jetty-project/jetty-alpn · GitHub

issueに導かれ以下の記事と出会った。
Jetty, ALPN & Java 8u252 – Webtide
どうやらjetty-alpn-agentはもう指定しなくていいらしい。

もともとhttp/2対応のために jetty-alpn-agentをjava-agentとして利用したが以下アップデートでJava本体で対応がされたため必要なくなった。
JEP 244: TLS Application-Layer Protocol Negotiation Extension

java.securityファイルの位置変更への対応

もともと $JAVA_HOME/jre/lib/security/java.security
もあったファイルがJava11では
$JAVA_HOME/conf/security/java.securityに場所が変更さた。

Java Security Overview
をみるとファイルの位置が書いてある。

最後に

私たちのアプリケーションはScalaから利用していたのと利用しているライブラリで問題がおきなかったので、幸いあまり多くの対応を必要としなかった。

アップデートによりGCの回数が落ち着きを見せたり、Java Flight Recorderの利用やJava 11であることを前提とした便利ツールを利用することが叶った。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0