I have a problem in my java program: it uses many off-heap operations, and I suspect that in some cases copying is too big by size of blocks or by rate.
So program constantly slow or become even more slow by load.
How to detect facts of massive copy of data in memory?
How to locate places in code which do it?
I want to use Intel Amplifier XE 2017 or any else appropriate tool.
Thanks in advance.
In VTune Amplifier XE 2017 I would suggest to run Memory Access analysis. The massive copying of data should manifest itself by high DRAM bandwidth utilization - so this is what you should look at first in the profiling results.
Examine the Bandwidth Utilization Histogram on Summary to find out the peak DRAM bandwidth utilization. If necessary adjust the Low/Medium/High utilization thresholds to correctly reflect your system characteristics (Amplifier should set them correctly by default but still there may be cases when adjustments are needed - e.g. if the application is single-threaded the max achievable bandwidth is much lower). In Bottom-up tab in the grid select 'Bandwidth Domain / Bandwidth Utilization Type / Function / ,,,' grouping, expand 'DRAM' and 'High' rows - and you will see all functions executed when your system DRAM bandwidth utilization was high. Dive to the Source View for these functions and you should find the code you are interested in.