2013-03-05 5 views
9

私は、Java 1.5でコーディングされたJavaプロジェクトを持っていて、それ以降のバージョンのJavaを使用していますが、目標を1.5に設定しています。古いバージョンのJavaの代わりに最新のJREを使用すると、動作することが保証されますか?

コードがコンパイルされ、後でJavaで正常にテストされると、実際のJava 1.5ランタイムで同じコードが動作することが保証されますか?

また、私が依存しているすべてのJREの1つのバージョンをインストールする必要がありますか?

JREのバグはどうなりますか? 1.5にバグがある場合、それは1.6で修正されています。ターゲットを1.5に設定してJava 1.6を使用すると、そのバグは私に影響しますか?

現実的なシナリオでは、これは私が全く必要とする懸念事項ですか?

+0

次の問題が発生しました。java7は、既存のインターフェイスに新しいメソッドを追加しました。コンパイラはjava6準拠に設定した後でも、欠落しているメソッドを実装しなければならないと私に言った( '@Override'で注釈を付ける)。そうした後、java6は新しい上書きされたメソッドを知らないと私に言った。しかし、多分それは食だけの問題でした... – moeTi

答えて

9

あなたが1.5にとソースをターゲット設定と仮定すると、あなただけの私は考えることができる3つの主なケースで心配する必要があります

  • あなたが変更または消滅している可能性が内部com.sunクラスを使用しています(何らかの他の内部的な振る舞いに依存している)
  • あなたはバグのある動作に頼っていますが、それ以降のバージョンで修正されました。
  • あなたは(まれであるが、起こることが知られている。)、後方互換性のない変更に実行

    JREのバグにどうなりますか? 1.5にバグがある場合、それは1.6で修正されています。ターゲットを1.5に設定してJava 1.6を使用すると、そのバグは私に影響しますか?

バグがライブラリ内にある場合、何それはあなたに影響を与えません。ターゲットはあなたがコンパイルするバイトコードのバージョンを実際に規定しているだけで、あなたはまだ更新されたライブラリを使用しています。しかし、あなたがこのバグの行動に頼っている場合、これは潜在的に問題を引き起こす可能性があることに注意してください。

意図的に後方互換性のない変更があった場合、これまでに見たすべてのケースは、ランタイムエラーではなくコンパイル時のエラーとして表示されるため、簡単に修正できます。)

私はまだリリース前に新しいバージョンのJVMをテストすることを主張していますが、実際にはではありません。とにかく私の経験ではの問題です。

5

すべての新しいJRE実装は互換性を維持するために作られているので、答えははいです。 しかし、あなたのアプリケーションをテストすることをお勧めします。あなたのプロジェクトに非常に固有の問題があるかもしれません。

2

質問をまとめるには: JREは下位互換性があり、JDKとの間で互換性がありますか?

短い答えははいです。

説明: JDKの下位互換性はありません。すなわち JDK5コードはJVM4では実行できず、JDK6ではJVM5コードを実行できません。

しかしJREは、多くの場合、組織書き込みなぜなら一度、後方互換性を作っ何回も実行

なぜさ:JREの、よりインテリジェントなヒープ管理に、ガベージコレクション、ますます高度化として スレッド処理などのために、新しいバージョンのJVMに移行しようとします。以前「ターゲット」と以降のバージョンのJVMを使用する場合

バグ
JVMに存在する実際のバグは、そのように行動を停止します。これは、target=prev_versionが実際には以前のJVMを完全に呼び出さないためです。
デルタをピックアップし、コードを異なる方法で処理します。しかし、それが意図的に新しいJVMに導入された機能(例えば6)だった場合、ターゲット= 1.5に切り替えることは、実際にはbeahviorに1.5に戻されます。

あなたの疑問をある程度明確にすることを望みます。

関連する問題