2017-11-29 35 views
-1

for 루프에 다음 메소드가 있습니다. 나는 그 일을함으로써 누출 된 기억에 대해 우려하고 있습니다. 내 질문 : 루프에 대한 모든 루프 들어, 사실 그 newInstance() 메서드는 새 메모리 블록을 할당합니다? 그렇다면 VehicleImpl 인스턴스를 for 루프에 넣고이 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 루프 앞에 선언하여이를 피할 수 있습니다.