Java Swing - O aplicativo JFreeChart funciona lentamente

Crio o programa JFreeChart que pode:

mover pontos de splinesnão permita cruzar splines pretos (splines de limite)crie novos splines em tempo real (como Grapher)zoom da roda do mouse

Para adicionar novas séries ao conjunto de dados, uso esta função:

   public static XYSeriesCollection createSplineDataset(File[] polFiles) {
        dataset = new XYSeriesCollection();
        for (File polFile : polFiles) {
            XYSeries series = new XYSeries(polFile.getName());
            Scanner s = null;
            try {
                s = new Scanner(new File(polFile.getAbsolutePath()));
            }catch (FileNotFoundException ex) {
                System.out.println("Scanner error!");
            }
            s.useLocale(Locale.US);
            while (s.hasNext()) {
                float x = s.nextFloat();
                float y = s.nextFloat();
                series.add(x, y);
            }
            dataset.addSeries(series);
        }
        return dataset;
    }

Programa principal (há mais de 500 strings de código, então isso faz parte):

public class SplineDemo {
    // declaration of variables
    private static void display(){
        final File[] polFiles = new File("FORPLOT").listFiles();
        polFiles[0] = new File("FORPLOT/InitPolin1");
        polFiles[1] = new File("FORPLOT/InitPolin0");
        for (int i = 2; i <= 36; i++)
            polFiles[i] = new File("FORPLOT/P"+(i-2));
        dataset = JFunc.createSplineDataset(polFiles); // create dataset
        // --------some code-----------
        NumberAxis domain = new NumberAxis("\u03C1");
        NumberAxis range = new NumberAxis("g(\u03C1)");
        SplineRenderer r = new SplineRenderer(20);
        xyplot = new XYPlot(dataset, domain, range, r);
        final XYLineAndShapeRenderer render = (XYLineAndShapeRenderer) xyplot.getRenderer();
        render.setBaseShapesVisible(true);
        final JFreeChart chart = new JFreeChart(xyplot);
        // --------some code-----------            
        chartPanel = new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(640, 480);
            }
        };        
        chart.removeLegend();
        chartPanel.addMouseListener(new MouseListener() {
        //------ for creating new splines and to move points of splines ---------
        });

        chartPanel.addMouseWheelListener(new MouseWheelListener() {
        //--------- zoom ------------
        });

        chartPanel.addMouseMotionListener(new MotionListener());

        chartPanel.addChartMouseListener(new ChartMouseListener() {
        //------ for creating new splines and to move points of splines ---------
        });

        chartPanel.setDomainZoomable(false);
        chartPanel.setRangeZoomable(false);
        chartPanel.setPopupMenu(null);
        frame = new JFrame(Title);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(chartPanel);

        //------ buttons -------

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.addComponentListener(new ComponentListener() {

            @Override
            public void componentResized(ComponentEvent ce) {
            // ---- to move points when window was resized
            }
        });
    }

    public static class MotionListener implements MouseMotionListener {
    //------ to move points -----------
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                display();
            }
        });
    }
}

Assim,@trashgod aconselhadoaqui para modificaruseBuffer mas isso não me ajudou. Portanto, meu problema é que, quando existem 1-5 splines ao mesmo tempo plotados, tudo funciona idealmente rapidamente. Quando eles se tornam mais de 30 splines como em uma captura de tela, o trabalho é desacelerado (por exemplo, os pontos não estão atrasados no mouse em caso de movimento, o zoom funciona mais devagar etc.). Em que o problema pode consistir? Aqui está o relatório do YourKit, mas eu não entendo. Lentamente, o novo desenho de todos os diagramas ou o que funciona?

Não entendo como 30 diagramas já podem frear. Qual será o caso de mais de 100? Se for necessário, posso descartar um código completo e projetar no arquivo zip

questionAnswers(1)

yourAnswerToTheQuestion