moodle

ガベージコレクション

第15章

Something obj = new Something();
  • 変数objは,Somethingクラスのインスタンスの参照したアドレスを保持している.
    Something obj1 = new Something();
    Something obj2 = obj1;
    obj1 = null;
  • obj1にnullを代入することで,どのアドレスも参照しない状態にする.このとき,obj2にSomethingクラスのインスタンスの参照を保持
    Something obj1 = new Something();
    Something obj2 = obj1;
    obj1 = null;
    obj2 = null;
  • obj2の参照もnullにすると,作ったSomethingクラスのインスタンスを参照できなくなる.このとき,ガベージ(ゴミ)となる.

ガベージコレクタ

  • ヒープ上に確保されたインスタンスのメモリ領域がガベージとなり,ガベージが蓄積されると,Java仮想マシンは,ガベージコレクションを始める.
  • どの変数からも参照されないインスタンスのメモリ領域を回収し,再利用する.

GcTest1.java:

public class GcTest1 {
    public static void main(String[] args) {
        while (true) {
            String s = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
            System.out.println("残りメモリ = " + Runtime.getRuntime().freeMemory());
        }
    }
}

メモリ管理のためのメソッド

  • 利用可能なメモリの大きさを得る
    long free = Runtime.getRuntime().freeMemory();
  • 全てのメモリの大きさを得る
    long total = Runtime.getRuntime().totalMemory();
  • 最大メモリの大きさを得る
    long max = Runtime.getRuntime().maxMemory();
  • ガベージコレクションを動作させる
    Runtime.getRuntime().gc();
    または,
    System.gc();

スレッド

第16章

スレッドを作る方法

  • Threadクラスの拡張クラスを作る
    1. Threadクラスの拡張クラスを作る
    2. そのクラスのrunメソッドを宣言する
    3. そのクラスのインスタンスを作る
    4. startメソッドを呼び出す

CountTenA.java

Expand allFold all
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
-
-
|
|
-
|
!
!
-
-
|
!
!
!
public class CountTenA extends Thread {
    public static void main(String[] args) {
        CountTenA ct = new CountTenA();
        ct.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main:i = " + i);
        }
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("run:i = " + i);
        }
    }
}
  • Runnableインターフェースを実装したクラスを作る
    1. Runnableインターフェースを実装したクラスを作る
    2. runメソッドを実装する
    3. そのクラスのインスタンスを作り,Threadオブジェクトを生成する
    4. Threadオブジェクトのstartメソッドを呼び出す

CountTenB.java

Expand allFold all
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
-
-
|
|
|
-
|
!
!
-
-
|
!
!
!
public class CountTenB implements Runnable {
    public static void main(String[] args) {
        CountTenB ct = new CountTenB();
        Thread th = new Thread(ct);
        th.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main:i = " + i);
        }
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("run:i = " + i);
        }
    }
}

Threadを作る方法のまとめ

方法A方法B
用途簡単なクラス向け複雑なクラス向け
スーパークラスThreadクラス何でもよい
クラス宣言Threadクラスの拡張Runnableインターフェスの実装
スレッドの起動startメソッドThread経由でstartを起動
実行開始点runメソッドrunメソッド


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-06-20 (木) 14:45:23 (2286d)