Hi all.
I noticed that Jsprit is spending a lot of time in Class.getSimpleName()
, as shown in the following stacktrace
"pool-9-thread-2" id=48 state=RUNNABLE
at java.lang.Class.getEnclosingMethod0(Native Method)
at java.lang.Class.getEnclosingMethodInfo(Class.java:1072)
at java.lang.Class.getEnclosingClass(Class.java:1272)
at java.lang.Class.getSimpleBinaryName(Class.java:1443)
at java.lang.Class.getSimpleName(Class.java:1309)
at com.graphhopper.jsprit.core.algorithm.recreate.AbstractInsertionCalculator.fulfilled(AbstractInsertionCalculator.java:71)
at com.graphhopper.jsprit.core.algorithm.recreate.ShipmentInsertionCalculator.getInsertionData(ShipmentInsertionCalculator.java:194)
at com.graphhopper.jsprit.core.algorithm.recreate.JobCalculatorSwitcher.getInsertionData(JobCalculatorSwitcher.java:40)
at com.graphhopper.jsprit.core.algorithm.recreate.VehicleTypeDependentJobInsertionCalculator.getInsertionData(VehicleTypeDependentJobInsertionCalculator.java:97)
at com.graphhopper.jsprit.core.algorithm.recreate.InsertionDataUpdater.update(InsertionDataUpdater.java:45)
at com.graphhopper.jsprit.core.algorithm.recreate.RegretInsertionConcurrentFast$2.call(RegretInsertionConcurrentFast.java:225)
at com.graphhopper.jsprit.core.algorithm.recreate.RegretInsertionConcurrentFast$2.call(RegretInsertionConcurrentFast.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
I didn’t have time to run this under a profiler, but I have 6 worker threads running basically the same code.
I also didn’t delve into it, but it seems that’s something that could be cached.
WDYT?