1

次のように、クラス内のメソッドを呼び出しています。

String key1 = "test1";
String key2 = "test2";

long[] datalr = new long[] {};

TestClass myTC1 = new TestClass(); 
datalr = myTC1.callerSub(key1,key2);
TestClass myTC2 = new TestClass(); 
datalr = myTC2.callerSub(key1,key2);

テストクラスは次のとおりです。

public class TestClass {

  private final Long[] P = new Long[18];



  Public TestClass {
  }

  public long[] callerSub(string key1, String key2){

    long[] datalr = new long[] {0,0};
    integer i;
    system.debug(LoggingLevel.INFO,P[0]);

    datalr[0] = 2;
    datalr[1] = 3;
    for ( i = 0; i < 18; ++i ){
      P[i] = i+1
    }
    return datalr;

  }
}

TestClass.callerSub を 2 回呼び出しています。最初にデバッグ ステートメントを呼び出します。

system.debug(LoggingLevel.INFO,P[0]);

当然のことながら、null を返します。

2 回目に呼び出すと、P[i] は値を持ち、

もう一度呼び出す前に、TestClass クラスを閉じるか破棄するにはどうすればよいですか?

ありがとう

4

4 に答える 4

2

クラスのインスタンスの削除に最も近い方法は、クラスへのすべての参照を削除し、system.gc() を呼び出して、jvm にガベージ コレクターを実行するよう提案することです。呼び出したときに jvm が gc を実行することを決定するという保証はありません。

問題の実際の解決策については、Louis Wasserman の回答を参照してください。

于 2013-06-07T19:02:01.780 に答える
0

Because P is a static field, it is created when the JVM starts up and is destroyed only on JVM shutdown. In addition, because you made P a constant (using final), you cannot set P = null in order to suggest to the garbage collector that it should be deleted. Thus, that array will be in the same location in memory and will always be pointed to by that static variable for as long as your program is running.

于 2013-06-07T19:02:14.613 に答える