2017-11-29 5 views
-1

Ich habe die folgende Methode mit den for-Schleifen. Ich mache mir Sorgen um die Speicherlecks, wenn ich das mache. Meine Frage: Für jede Schleife in for-Schleifen, ist das wahr, newInstance() Methode wird neuen Speicherblock zuweisen? Wenn das so ist, sollte ich eine VehicleImpl Instanz erstellen, bevor ich in die for-Schleife gehe und versuche, neue Werte für diese VehicleImpl Instanz zu setzen.Memory-Leck bei Verwendung newInsance() -Methode

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

warum auf newInstance() statt z. '' 'neuer Break.Builder (" Mittagessen ")' ''? – spi

+0

@ S.Piller, weil die set-Methoden nicht mit 'new Break.Builder (" Lunch ")' funktionieren –

Antwort

0

Hier ist kein Speicherleck vorhanden. Es gibt nur eine temporäre Referenzvariable, die in jeder Iteration der for-Schleife erstellt und zerstört wird. Sie können dies vermeiden, indem Sie diese Variable vor der for-Schleife deklarieren.

Verwandte Themen