JavaのJREとJDKの違い


JREとJDKの違いが、いまいち分かっていません。  
JREは実行時に必要、JDKは開発時に使う、JREはJDKに含まれている、というような、[ここに書かれているような内容](http://www.task-
notes.com/entry/20140810/1407599796)程度のことは分かっています。

開発環境にJDKが必要なのは間違いないと思いますが、では、本番環境は常にJREを使うべきなのでしょうか？  
ここで想定しているアプリケーションは、JBossEAPなどの上で動くウェブアプリケーションであり、本番環境とは、自社で運営するクラウドサービスのサーバであったり、顧客に社内に構築されたサーバであったり、というものです。

「JREは実行時に必要、JDKは開発時に使う、JREはJDKに含まれている」という程度の知識しか無いため、本番環境は常にJREにすべきなのか、JDKを使っても良いのか、あるいはJDKを使う方が良いケースがあるのか、その判断基準がありません。

この判断基準となるような、具体的な違いを知りたいです。

また、OracleJDKのサポートサイクル（バグフィックスやセキュリティパッチのリリース）が変更になりますが、この点についても疑問があります。  
もし本番環境にはJREしか使わない場合、開発環境のJDKにセキュリティパッチが当たらなかったとして、本番環境にはどのような影響があるのでしょう？  
本番環境のJREにきちんとパッチがあたっていれば、アプリケーションの運用には特に問題が無いのでしょうか？




ミドルウェアなどの動作にJDKが必要であればJDKを使いますが、基本的にそれらはJREだけで動くようにつくってあるはずなので、JREだけで十分です。ただし、障害時の解析に必要なjstackやjmapなどのコマンドはJDKに含まれているので、JDKを入れた方が無難です。

ちなみに、JBoss EAPはJDKの使用を推奨していますが、JREでも問題なく動作するはずです

[参考]  
<https://access.redhat.com/solutions/18259>

> もし本番環境にはJREしか使わない場合、開発環境のJDKにセキュリティパッチが当たらなかったとして、本番環境にはどのような影響があるのでしょう？  
>  本番環境のJREにきちんとパッチがあたっていれば、アプリケーションの運用には特に問題が無いのでしょうか？

本番環境のシステムがJREだけで動作するのであれば、JDK（JREではない部分）にセキュリティ脆弱性があっても問題はありません。




ミドルウェアなどの動作にJDKが必要であればJDKを使いますが、基本的にそれらはJREだけで動くようにつくってあるはずなので、JREだけで十分です。ただし、障害時の解析に必要なjstackやjmapなどのコマンドはJDKに含まれているので、JDKを入れた方が無難です。

ちなみに、JBoss EAPはJDKの使用を推奨していますが、JREでも問題なく動作するはずです

[参考]  
<https://access.redhat.com/solutions/18259>

> もし本番環境にはJREしか使わない場合、開発環境のJDKにセキュリティパッチが当たらなかったとして、本番環境にはどのような影響があるのでしょう？  
>  本番環境のJREにきちんとパッチがあたっていれば、アプリケーションの運用には特に問題が無いのでしょうか？

本番環境のシステムがJREだけで動作するのであれば、JDK（JREではない部分）にセキュリティ脆弱性があっても問題はありません。

