@@ -130,21 +130,19 @@ static void fit(final Dataset dataset,
130
130
final int numIterations = parseInt (params .get (NUM_ITERATIONS_PARAMETER_NAME ));
131
131
logger .debug ("LightGBM model trainParams: {}" , trainParams );
132
132
133
- final SWIGTrainData swigTrainData = new SWIGTrainData (
134
- numFeatures ,
135
- instancesPerChunk );
136
- final SWIGTrainBooster swigTrainBooster = new SWIGTrainBooster ();
137
133
138
- /// Create LightGBM dataset
139
- createTrainDataset (dataset , numFeatures , trainParams , swigTrainData );
134
+ try (final SWIGTrainBooster swigTrainBooster = new SWIGTrainBooster ();
135
+ final SWIGTrainData swigTrainData = new SWIGTrainData (numFeatures , instancesPerChunk )){
136
+ /// Create LightGBM dataset
137
+ createTrainDataset (dataset , numFeatures , trainParams , swigTrainData );
140
138
141
- /// Create Booster from dataset
142
- createBoosterStructure (swigTrainBooster , swigTrainData , trainParams );
143
- trainBooster (swigTrainBooster .swigBoosterHandle , numIterations );
139
+ /// Create Booster from dataset
140
+ createBoosterStructure (swigTrainBooster , swigTrainData , trainParams );
141
+ trainBooster (swigTrainBooster .swigBoosterHandle , numIterations );
144
142
145
- /// Save model
146
- saveModelFileToDisk (swigTrainBooster .swigBoosterHandle , outputModelFilePath );
147
- swigTrainBooster . close (); // Explicitly release C++ resources right away. They're no longer needed.
143
+ /// Save model
144
+ saveModelFileToDisk (swigTrainBooster .swigBoosterHandle , outputModelFilePath );
145
+ }
148
146
}
149
147
150
148
/**
@@ -231,28 +229,30 @@ private static void initializeLightGBMTrainDatasetFeatures(final SWIGTrainData s
231
229
232
230
/// First generate the array that has the chunk sizes for `LGBM_DatasetCreateFromMats`.
233
231
final SWIGTYPE_p_int swigChunkSizesArray = genSWIGFeatureChunkSizesArray (swigTrainData , numFeatures );
234
-
235
- /// Now create the LightGBM Dataset itself from the chunks:
236
- logger .debug ("Creating LGBM_Dataset from chunked data..." );
237
- final int returnCodeLGBM = lightgbmlib .LGBM_DatasetCreateFromMats (
238
- (int ) swigTrainData .swigFeaturesChunkedArray .get_chunks_count (), // numChunks
239
- swigTrainData .swigFeaturesChunkedArray .data_as_void (), // input data (void**)
240
- lightgbmlibConstants .C_API_DTYPE_FLOAT64 ,
241
- swigChunkSizesArray ,
242
- numFeatures ,
243
- 1 , // rowMajor.
244
- trainParams , // parameters.
245
- null , // No alighment with other datasets.
246
- swigTrainData .swigOutDatasetHandlePtr // Output LGBM Dataset
247
- );
248
- if (returnCodeLGBM == -1 ) {
249
- logger .error ("Could not create LightGBM dataset." );
250
- throw new LightGBMException ();
232
+ try {
233
+ /// Now create the LightGBM Dataset itself from the chunks:
234
+ logger .debug ("Creating LGBM_Dataset from chunked data..." );
235
+ final int returnCodeLGBM = lightgbmlib .LGBM_DatasetCreateFromMats (
236
+ (int ) swigTrainData .swigFeaturesChunkedArray .get_chunks_count (), // numChunks
237
+ swigTrainData .swigFeaturesChunkedArray .data_as_void (), // input data (void**)
238
+ lightgbmlibConstants .C_API_DTYPE_FLOAT64 ,
239
+ swigChunkSizesArray ,
240
+ numFeatures ,
241
+ 1 , // rowMajor.
242
+ trainParams , // parameters.
243
+ null , // No alighment with other datasets.
244
+ swigTrainData .swigOutDatasetHandlePtr // Output LGBM Dataset
245
+ );
246
+ if (returnCodeLGBM == -1 ) {
247
+ logger .error ("Could not create LightGBM dataset." );
248
+ throw new LightGBMException ();
249
+ }
250
+ // FIXME is this init necessary?
251
+ swigTrainData .initSwigDatasetHandle ();
252
+ } finally {
253
+ lightgbmlib .delete_intArray (swigChunkSizesArray );
251
254
}
252
255
253
- swigTrainData .initSwigDatasetHandle ();
254
- swigTrainData .destroySwigTrainFeaturesChunkedDataArray ();
255
- lightgbmlib .delete_intArray (swigChunkSizesArray );
256
256
}
257
257
258
258
/**
@@ -313,7 +313,6 @@ private static void setLightGBMDatasetLabelData(final SWIGTrainData swigTrainDat
313
313
throw new LightGBMException ();
314
314
}
315
315
316
- swigTrainData .destroySwigTrainLabelDataArray ();
317
316
}
318
317
319
318
/**
0 commit comments