多くのポイントを処理する必要がある Java プログラムを作成しています。よく言えば10万ポイント以上。さらに、ポイントを何度も作成する必要があります。このオブジェクトの作成によってアルゴリズムの時間が遅くなり、大量のメモリが消費されるのではないかと心配しています。
考えられる解決策はいくつかありますが、これらは機能しますか? 状況を処理するためのより良い方法はありますか?
解決策 1) -すべてのポイントが破壊される代わりに送信されるポイント「工場」。ここでは、それらはリサイクルされるため、オブジェクトを再作成する必要はありません。
public class PointFactory {
public final static List<Point> unused = new ArrayList<Point>();
public static void disposePoint( Point point ){
unused.add( point );
}
public static void disposePoints( List<Point> points ){
for( Point point: points )
unused.add( point );
}
public static Point newPoint( int x, int y ){
if( unused.isEmpty() )
return new Point( x, y );
else{
Point point = unused.get(0);
point.x = x;
point.y = y;
return point;
}
}
}
解決策 2) 解決策 1 と非常に似ていますが、不要なオーバーヘッドを避けるために新しい構造 "XY" を使用します。必要なのは X 値と Y 値だけです。
public class XYFactory {
public final static List<XY> unused = new ArrayList<XY>();
public static void disposeXY( XY xy ){
unused.add( xy );
}
public static XY newXY( int x, int y ){
if( unused.isEmpty() )
return new XY( x, y );
else{
XY xy = unused.get(0);
xy.x = x;
xy.y = y;
return xy;
}
}
}
public class XY {
public XY( int x, int y ){
this.x = x;
this.y = y;
}
public int x;
public int y;
public boolean equals( Object o ){
if( !( o instanceof XY ) )
return false;
XY xy = (XY)o;
return xy.x == x && xy.y == y;
}
}