「java」タグアーカイブ

Javaのバージョンアップ手順

しばらくJavaのバージョンアップを実施してなかったのでバージョンアップ時の手順をメモしておきます。
今回はJava 1.6.0_45 ⇒1.8.0_331へバージョンアップしてみます。
※2022年5月時点でJavaの最新バージョンは18ですが開発で使用してるのは8なので今回最新版にはしてません。

jdkのダウンロード

  • Oracleの「Javaアーカイブ」ページからダウンロードする事が可能です。
    ダウンロードする場合Oracleアカウントが必要となります。
    ⇒Oracle Java Archiveページ

jdkのインストール手順

  1. インストールする前にまずは現在適用されているJavaのバージョンを確認します。コマンドプロンプトの画面で「javac -version」と入力すれば現在適用されているJavaのバージョンを確認できます。
  2. OracleのアーカイブページでJavaのバージョンを選択します。今回は「Java SE 8(8u211 and later)」を選択します。
  3. 次にjdkのインストーラーを選択します。今回は64ビット版の「jdk-8u331-windows-x64.exe」を選択します。
  4. ダウンロードした「jdk-8u331-windows-x64.exe」を実行してセットアップ画面の「次」ボタンを選択します。
  5. インストール先を変更したい場合は変更ボタンから指定してから「次へ」ボタンを選択します。
  6. インストールが終了するの以下の画面が表示されるので「閉じる」ボタンを選択します。
  7. コントロールパネル ⇒ システム ⇒ システムの詳細設定から環境変更を設定します。
  8. システム環境変数の「JAVA_HOME」を選択しjdkをインストールしたフォルダを指定します。
  9. 次にシステム環境変数の「Path」を選択肢jdkのフォルダが指定されている箇所を変更します。
  10. 環境変数の設定が完了したら再度コマンドプロンプト画面でJavaのバージョンを確認して値が変更されていればバージョンアップ作業完了です。

 

 

インスタンス変数とローカル変数の違い

Webシステムは基本的に複数人で同時利用されるのが前提のため、マルチスレッドアクセスを考慮した設計・実装を行う必要があります。業務でJavaの各変数とスレッドセーフについて考える機会があったので、「インスタンス変数とローカル変数の違いとスレッドセーフとの関係」について今回は整理してみようと思います。

Javaでの変数毎のメモリ管理イメージ


    上記は変数毎のメモリ管理イメージとなります。Javaではクラス変数やインスタンス変数はヒープ領域と呼ばれる共有メモリ領域へ保存されます。複数のスレッドで共有され別のスレッドに書き換えられる可能性があり,スレッドセーフではありません。対してローカル変数はJavaスタックと呼ばれるスレッド固有メモリ領域へ保存されます。スレッド固有領域なので別のスレッドに書き換えられる可能性はないのでスレッドセーフとなります。

インスタンス変数とは

  • サンプルコード
  • メソッドの外に記述します。staticは付けません(staticが付くとクラス変数になります)。
  • ヒープ領域と呼ばれる共有メモリ領域へ保存される為、宣言しただけではスレッドセーフにはなりません。
  • スレッドセーフを保つ為には初期化する必要があります。
    • コンスラクタで初期化
    • インスタンス宣言時に初期化
    • 最初のget時に初期化
  • 他のスレッドからの更新を防ぐ為、修飾子はprivateにする必要があります。
  • 当該クラス内の任意のメソッドから参照可能となります。

ローカル変数とは

  • サンプルコード
  • メソッド内に記述します。
  • そのメソッドが実行中の間だけ有効となります。
  • Javaスタックと呼ばれるスレッド固有メモリ領域へ保存される為、スレッドセーフとなります。