2011-02-11 9 views
0

この問題のクラスを使用するかどうかについては質問があります。ここに私のシナリオがあります:クラスを使用するかどうかを指定するクラス

私は毎秒2セットのデータを含むデータパケットを受信します。データAおよびデータB。データを取得したら、そのデータをタイムスタンプする必要があります。私はデータの計算を行い、答えを保持する必要があります。私は私に来る各データパケットのためのクラスを使用することについて考えています。そして、そのクラスにタイムスタンプのメンバーと私が必要とする他のすべてのものを持っています。

これは良い考えですか?より良い方法がありますか?

私はJavaの初心者です。私はC++から来ています。私はそれらを使って終了した後、これらのクラスを解体する必要がありますか?私はオブジェクトを完了したら、どうすればそれを取り除くことができますか?

ありがとうございます!

+0

@ALL、クイックインフォメーションありがとう! <3 SO。 – prolink007

答えて

2

確かに私にとっては正しいようです。基本データを取得し、そのデータを含むクラスとそのメタデータ情報でラップします。Javaでは、コードを格納するクラスを持つ必要があります。このすべてのものをカプセル化する必要があるので、私はそれは良い設計決定だと言います。

自分でクラスを破壊する必要があるのは、通常はありません。 Java VMには、参照されていないオブジェクトを検索して破棄するガベージコレクタがあります。これは通常、管理されたオブジェクト(プログラムのメモリ「サンドボックス」内に完全に存在するオブジェクト)の場合に非常に効率的です。

1

まあ、Javaではほとんどすべてのクラスです。

はい、パッケージデータとそれに関するすべての操作をクラスとしてモデル化するのに適しています。

いいえ、オブジェクトを手動で解体する必要はありません。もう何も参照しない場合は、ガベージコレクタによって収集されます(結局)。

*実際のルールはそれより少し複雑です。アクティブなスレッドから到達できないオブジェクトはすべてガベージコレクションの対象とみなされます。つまり、オブジェクト間の循環参照を心配する必要はありません。

+0

あなたの言うことですが、何もオブジェクトを一定期間参照すると、最終的にガベージコレクションが行われますか?またはオブジェクトを破壊するために明示的に何かを呼び出せますか? – prolink007

+1

いいえ、あなたはC++のようにオブジェクトをJavaで明示的に破棄することはできません。それは、マネージメモリの言語とのトレードオフです。あなたはただVMがそれを回るのを待たなければなりません。 – KeithS

+0

@ prolink007私は自分の答えを更新しました。ルールはそれよりももっとリラックスしていますが、あなたが正しいです。オブジェクトを手動で破棄することはできません。私はあなたがC/C++のバックグラウンドから来ても、現代のGCアルゴリズムは驚くほど効果的であると思うと、それは変だと思います。情報のおかげで – biziclop

1

独自のクラスを作成します。それはJavaの方法です。

クラスがプライベート内部クラスでない限り、privateフィールドとgetter/setterメソッドを使用してアクセスして更新する必要があります。または、フィールドを更新する必要がない場合は、setterメソッドのみを使用します。 (これはC/C++の観点からは重いと思うかもしれませんが、getterとsetterは長期的に成果を上げる傾向があり、JITコンパイラは通常インラインで呼び出しを行います)。

心配する必要はありませんメモリ管理。 Javaガベージコレクターは、アクセスできないインスタンスを自動的に取り除きます。ほとんどの場合、GCが問題を処理するようにするのが最善です。


(良くないものしかし、IMO)は選択肢があります:

  • は、名前と値のペアとしてオブジェクトを表現するために、このようなHashMapPropertiesなどの一般的なマップタイプを使用してください。これは、多くの観点から悪い選択です。パフォーマンスが悪く、明確なAPI( "オブジェクト"用)がなく、コードがより脆弱です。

  • 配列またはリストタイプを使用します。これはさらに悪いことです。なぜなら、あなたはフィールドの「名前」を持っていないからです。

  • データパケットを一切明示せず、別々にビットを渡します。うん...

0

不変クラスを使用できます。 IMHOリモートデータをモデル化するより良い方法です。あなたがそれらを参照していれば、ガベージコレクターはあなたの記憶を解放します。

良い仕事をしてください。

関連する問題