Help us understand the problem. What is going on with this article?

【随時更新】JDK9の非互換ポイント

More than 3 years have passed since last update.

JDK9でいくつかImcompatibleな問題に直面したので、ここにGitHubのIssueから、各プロダクトで挙がっているJDK9の不具合ポイントをまとめていきます。

java.specification.versionの体系変更

https://github.com/hibernate/hibernate-validator/pull/457/

JDK9からは、JEP 223にともない、バージョン番号の表記が変わりました。そして、システムプロパティjava.specification.versionの返す値も従来の「1.8」みたいな値から「9-ea」が返ってくるようになっています。

このため、HibernateValidatorでは、以下の箇所でArrayIndexOutOfRangeExceptionが出てしまっていました。

String[] specificationVersion = System.getProperty( "java.specification.version" ).split( "\\." );

return Integer.parseInt( specificationVersion[1] );

sun.misc.VMの廃止

https://github.com/JetBrains/intellij-community/commit/f50e99ed18268b7cd0d66d4bdef0d0c481c0d6ad

Intellij IDEAで発生していた問題ですが、sun.*パッケージのいくつかはjdk.internalパッケージに移され、本当にJDK内部でしかアクセスできないクラスになりました。(ちょっと前に廃止か?との噂があったsun.misc.Unsafeは、そのままアクセスできます。)

String内部のデータ表現がchar[]からbyte[]になった

JEP 254にしたがい、内部表現がUTF-16のchar配列だったのが、1バイトのみで扱えるものは1バイトで、それ以外は従来どおりUTF-16で持つように変更になりました。

https://github.com/hazelcast/hazelcast/pull/5799

String#toCharArrayでは、新しいchar[]に値がコピーされるので、その分の性能ロスを嫌って、直接Stringのvalueフィールドにアクセスしているようなプロダクトは影響を受けることになります。

AppClassLoaderがURLClassLoaderを継承しなくなった

https://github.com/Mojang/LegacyLauncher/pull/11

Jigsaw対応のため、たいていの場合システムクラスローダーとして使われるAppClassLoaderが、URLClassLoaderを継承しなくなりました。

システムクラスローダーのクラスパスをURLClassLoaderにキャストして取得しているところは、ClassCastExceptionになるので、対応が必要になります。

((URLClassLoader) getClass().getClassLoader()).getURLs()

-XX:PermSize, -XX:MaxPermSizeの廃止

JDK8ですでに警告が出て無視されていましたが、JDK9ではオプション自体が削除されエラーになるようになりました。

その他

まだそれが原因で問題が出ているIssueは見当たりませんが…以下の変更があります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした