2017-11-29 15 views
-1

forループで次のメソッドを使用しています。私はそれを行うことによってメモリが漏れてしまうのではないかと懸念しています。 私の質問:forループのすべてのループに対して、newInstance()メソッドは新しいメモリブロックを割り当てますか?その場合は、forループにステップする前にVehicleImplインスタンスを作成し、このVehicleImplインスタンスの新しい値を設定しようとしてください。newInsance()メソッドを使用するとメモリリークが発生する

private List<VehicleImpl> setVehicles(JsonInput input) { 
    List<VehicleImpl> vehicles = new ArrayList<VehicleImpl>(); 

    Break lunch = Break.Builder.newInstance("Lunch") 
      //timewindow(start time, end time), so lunch timewindow(start, start + duration) 
      .setTimeWindow(TimeWindow.newInstance(input.getLunch().getStart(), 
        input.getLunch().getStart() + input.getLunch().getDuration())) 
      //Lunch has highest priority 
      .setPriority(1) 
      //Lunch takes serviceTime 
      .setServiceTime(input.getLunch().getDuration()) 
      .build(); 

    VehicleType type = VehicleTypeImpl.Builder.newInstance("vehicleType") 
      .setCostPerDistance(input.getCosts().getCostPerMeter()) 
      .setCostPerTransportTime(input.getCosts().getCostPerTransportSecond()) 
      .setCostPerServiceTime(input.getCosts().getCostPerServiceTime()) 
      .build(); 

    for(int i = 0; i < input.getNoVehicles(); i++) { 
               //Name vehicle by index 
     VehicleImpl vehicle = VehicleImpl.Builder.newInstance("vehicle " + String.valueOf(i+1)) 
       //The first location - depot location is indexed as 0 in Matrices 
       .setStartLocation(Location.newInstance(i)) 
       .setBreak(lunch) 
       .setLatestArrival(input.getOperating()) 
       .setType(type) 
       .build(); 
     vehicles.add(vehicle); 
    } 
    return vehicles; 
} 
+0

なぜ、例の代わりにnewInstance()に頼っているのですか? '' '新しいBreak.Builder(" Lunch ")' ''? – spi

+0

@ S.Pillerが原因で、setメソッドが 'new Break.Builder(" Lunch ")' –

答えて

0

ここにはメモリがありません。 forループの各繰り返しで作成され、破棄される一時参照変数があります。その変数をforループの前に宣言することで、それを避けることができます。

関連する問題