Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Language IDEs » Java Development Tools (JDT) » Increase Java Heap size(for reading huge tables in volatile memory)
Increase Java Heap size [message #719228] Fri, 26 August 2011 13:18 Go to next message
Raffael  is currently offline Raffael Friend
Messages: 1
Registered: August 2011
Junior Member
Hi all,

I am experiencing a memory problem. I want to increase heap size to a maximum, for being able to process huge tables, stored in files.

I give a short description of my problem:
In a graphical interface I want to handle these huge tables. Please find an implementation of such an interface attached (quite simple):

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
 
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class FileImport extends JFrame {
 
    private BufferedReader br;
    private File importFile;
    private JFileChooser chooser;
    private FileImport _this;
    private volatile boolean importRunning = false;
    private DefaultTableModel model;
 
    /** Creates new form FileImport */
    public FileImport() {
        initComponents();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        _this = this;
    }
 
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;
 
        bgPanel = new JPanel();
        tablePanel = new JPanel();
        scrollPane = new JScrollPane();
        jTable1 = new JTable();
        controlsPanel = new JPanel();
        btnChoseFile = new JButton();
        txtPath = new JTextField();
        btnImport = new JButton();
        lblPath = new JLabel();
        lblDelimiter = new JLabel();
        txtDelimiter = new JTextField();
 
        getContentPane().setLayout(new java.awt.FlowLayout());
 
        setTitle("FileImport");
 
        bgPanel.setLayout(new java.awt.GridBagLayout());
 
        
        bgPanel.setMinimumSize(new java.awt.Dimension(400, 300));
        bgPanel.setPreferredSize(new java.awt.Dimension(400, 300));
        
        tablePanel.setMinimumSize(new java.awt.Dimension(400, 200));
        tablePanel.setPreferredSize(new java.awt.Dimension(400, 200));
        scrollPane.setMinimumSize(new java.awt.Dimension(400, 200));
        scrollPane.setPreferredSize(new java.awt.Dimension(400, 200));
 
        jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        scrollPane.setViewportView(jTable1);
 
        tablePanel.add(scrollPane);
 
        bgPanel.add(tablePanel, new java.awt.GridBagConstraints());
 
        controlsPanel.setLayout(new java.awt.GridBagLayout());
 
        controlsPanel.setMinimumSize(new java.awt.Dimension(400, 100));
        controlsPanel.setPreferredSize(new java.awt.Dimension(400, 100));
        btnChoseFile.setText("Chose File");
        btnChoseFile.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnChoseFileActionPerformed(evt);
            }
        });
 
        controlsPanel.add(btnChoseFile, new java.awt.GridBagConstraints());
 
        txtPath.setColumns(20);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        controlsPanel.add(txtPath, gridBagConstraints);
 
        btnImport.setText("Import");
        btnImport.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImportActionPerformed(evt);
            }
        });
 
        controlsPanel.add(btnImport, new java.awt.GridBagConstraints());
 
        lblPath.setText("Path: ");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        controlsPanel.add(lblPath, gridBagConstraints);
 
        lblDelimiter.setText("Delimiter: ");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        controlsPanel.add(lblDelimiter, gridBagConstraints);
 
        txtDelimiter.setColumns(3);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 2;
        controlsPanel.add(txtDelimiter, gridBagConstraints);
 
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        bgPanel.add(controlsPanel, gridBagConstraints);
 
        getContentPane().add(bgPanel);
 
        pack();
    }
 
    private void btnImportActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
        if (importFile != null)
            if (!importRunning) {
 
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        doImport(importFile);
                    }
                });
            } else {
                System.out.println("Still importing ... ");
            }
    }
 
    /**
     * @param importFile
     */
    protected void doImport(File importFile) {
        // TODO Auto-generated method stub
        String delimiter = txtDelimiter.getText();
        if (delimiter == null || !delimiter.equals(""))
            delimiter = ";";
        try {
            br = new BufferedReader(new FileReader(importFile));
 
            ArrayList rows = new ArrayList();
            Object[] clmHeaders = null;
 
            String line = null;
            StringTokenizer tokenizer = null;
 
            int tCnt = -1;
 
            while ((line = br.readLine()) != null) {
                tokenizer = new StringTokenizer(line, delimiter);
                tCnt = tokenizer.countTokens();
                Object[] rowData = new Object[tCnt];
                int i = 0;
                while (tokenizer.hasMoreTokens())
                    rowData[i++] = tokenizer.nextToken();
                rows.add(rowData);
            }
 
            clmHeaders = new Object[((Object[]) rows.get(0)).length];
 
            for (int i = 0; i < clmHeaders.length; i++) {
                clmHeaders[i] = "Column" + i;
            }
 
            Object[][] oArray = new Object[tCnt][];
            int lstSize = rows.size();
            for (int i = 0; i < lstSize; i++)
                oArray[i] = (Object[]) rows.get(i);
 
            model = new DefaultTableModel(oArray, clmHeaders);
 
            jTable1.setModel(model);
            jTable1.updateUI();
 
            System.out.println("Import complete!");
 
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
 
    private void btnChoseFileActionPerformed(java.awt.event.ActionEvent evt) {
        // Add your handling code here:
        if (chooser == null)
            chooser =
                new JFileChooser(new File(System.getProperty("user.dir")));
 
        chooser.showDialog(this, "load");
        importFile = chooser.getSelectedFile();
        if (importFile != null)
            txtPath.setText(importFile.getAbsolutePath());
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new FileImport().show();
    }
 
    // Variables declaration - do not modify
    private JButton btnChoseFile;
    private JButton btnImport;
    private JPanel bgPanel;
    private JPanel tablePanel;
    private JPanel controlsPanel;
    private JScrollPane scrollPane;
    private JTable jTable1;
    private JLabel lblDelimiter;
    private JLabel lblPath;
    private JTextField txtDelimiter;
    private JTextField txtPath;
    // End of variables declaration
 
}


Then I try to read in a data table. file Size: 64MB, consisting of 7.2 mio rows and 13 columns. When I try to read in the file, the java.lang.OutOfMemoryError occurs:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOfRange(Unknown Source)
	at java.lang.String.<init>(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at FileImport.doImport(FileImport.java:180)
	at FileImport$3.run(FileImport.java:153)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
My system:
Pentium Dual Core CPU, 3.21 GB RAM, Windows XP, 32 bit.

Eclipse:
Eclipse IDE for Java Developers

Version: Helios Service Release 2
Build id: 20110218-0911

In the Eclipse.ini I tried the following:
-startup
plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
--launcher.defaultAction
openFile
-vm
c:\Programme\Java\jre1.5.0_15\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:+AggressiveHeap 
this produces the java.lang.OutOfMemoryError.

The same if I change
-XX:+AggressiveHeap to
-Xmx1024m

or to
-Xmx1500m

The interesting thing is, when I monitor my RAM-consumption (TaskManager), my computer 'consumes' round about 256MB of RAM while loading the table, but then stops with the above mentioned error, which males me think, I am doing sth wrong, so to say, I think I am not configurating my system correctly. Do you have any clou, how I could double check my settings of the heap size? Or do you even have a guessing what might go wrong?

Btw: Changing -XX:+AggressiveHeap to -Xmx2048m Eclipse says at startup "Cannot create Java Virtual Maschine".

Thanks,
Raffael.

[Updated on: Fri, 26 August 2011 13:23]

Report message to a moderator

Re: Increase Java Heap size [message #719277 is a reply to message #719228] Fri, 26 August 2011 14:59 Go to previous message
Dani Megert is currently offline Dani MegertFriend
Messages: 3802
Registered: July 2009
Senior Member
On 26.08.2011 15:18, Raffael wrote:
> Hi all,
>
> I am experiencing a memory problem. I want to increase heap size to a
> maximum, for being able to process huge tables, stored in files.
Looking at the example it looks like you want to increase the memory for
the launch configuration and not the IDE itself. Open the launch
configuration and then add the VM arguments there.

Dani
>
> I give a short description of my problem:
> In a graphical interface I want to handle these huge tables. Please
> find an implementation of such an interface attached (quite simple):
>
> import java.io.BufferedReader;
> import java.io.File;
> import java.io.FileNotFoundException;
> import java.io.FileReader;
> import java.io.IOException;
> import java.util.ArrayList;
> import java.util.StringTokenizer;
>
> import javax.swing.JButton;
> import javax.swing.JFileChooser;
> import javax.swing.JFrame;
> import javax.swing.JLabel;
> import javax.swing.JPanel;
> import javax.swing.JScrollPane;
> import javax.swing.JTable;
> import javax.swing.JTextField;
> import javax.swing.SwingUtilities;
> import javax.swing.table.DefaultTableModel;
>
> public class FileImport extends JFrame {
>
> private BufferedReader br;
> private File importFile;
> private JFileChooser chooser;
> private FileImport _this;
> private volatile boolean importRunning = false;
> private DefaultTableModel model;
>
> /** Creates new form FileImport */
> public FileImport() {
> initComponents();
> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> _this = this;
> }
>
> private void initComponents() {
> java.awt.GridBagConstraints gridBagConstraints;
>
> bgPanel = new JPanel();
> tablePanel = new JPanel();
> scrollPane = new JScrollPane();
> jTable1 = new JTable();
> controlsPanel = new JPanel();
> btnChoseFile = new JButton();
> txtPath = new JTextField();
> btnImport = new JButton();
> lblPath = new JLabel();
> lblDelimiter = new JLabel();
> txtDelimiter = new JTextField();
>
> getContentPane().setLayout(new java.awt.FlowLayout());
>
> setTitle("FileImport");
>
> bgPanel.setLayout(new java.awt.GridBagLayout());
>
> bgPanel.setMinimumSize(new java.awt.Dimension(400, 300));
> bgPanel.setPreferredSize(new java.awt.Dimension(400, 300));
> tablePanel.setMinimumSize(new java.awt.Dimension(400,
> 200));
> tablePanel.setPreferredSize(new java.awt.Dimension(400, 200));
> scrollPane.setMinimumSize(new java.awt.Dimension(400, 200));
> scrollPane.setPreferredSize(new java.awt.Dimension(400, 200));
>
> jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
> scrollPane.setViewportView(jTable1);
>
> tablePanel.add(scrollPane);
>
> bgPanel.add(tablePanel, new java.awt.GridBagConstraints());
>
> controlsPanel.setLayout(new java.awt.GridBagLayout());
>
> controlsPanel.setMinimumSize(new java.awt.Dimension(400, 100));
> controlsPanel.setPreferredSize(new java.awt.Dimension(400, 100));
> btnChoseFile.setText("Chose File");
> btnChoseFile.addActionListener(new
> java.awt.event.ActionListener() {
> public void actionPerformed(java.awt.event.ActionEvent evt) {
> btnChoseFileActionPerformed(evt);
> }
> });
>
> controlsPanel.add(btnChoseFile, new
> java.awt.GridBagConstraints());
>
> txtPath.setColumns(20);
> gridBagConstraints = new java.awt.GridBagConstraints();
> gridBagConstraints.gridx = 1;
> gridBagConstraints.gridy = 1;
> controlsPanel.add(txtPath, gridBagConstraints);
>
> btnImport.setText("Import");
> btnImport.addActionListener(new java.awt.event.ActionListener() {
> public void actionPerformed(java.awt.event.ActionEvent evt) {
> btnImportActionPerformed(evt);
> }
> });
>
> controlsPanel.add(btnImport, new java.awt.GridBagConstraints());
>
> lblPath.setText("Path: ");
> gridBagConstraints = new java.awt.GridBagConstraints();
> gridBagConstraints.gridx = 0;
> gridBagConstraints.gridy = 1;
> controlsPanel.add(lblPath, gridBagConstraints);
>
> lblDelimiter.setText("Delimiter: ");
> gridBagConstraints = new java.awt.GridBagConstraints();
> gridBagConstraints.gridx = 0;
> gridBagConstraints.gridy = 2;
> controlsPanel.add(lblDelimiter, gridBagConstraints);
>
> txtDelimiter.setColumns(3);
> gridBagConstraints = new java.awt.GridBagConstraints();
> gridBagConstraints.gridx = 1;
> gridBagConstraints.gridy = 2;
> controlsPanel.add(txtDelimiter, gridBagConstraints);
>
> gridBagConstraints = new java.awt.GridBagConstraints();
> gridBagConstraints.gridx = 0;
> gridBagConstraints.gridy = 1;
> bgPanel.add(controlsPanel, gridBagConstraints);
>
> getContentPane().add(bgPanel);
>
> pack();
> }
>
> private void btnImportActionPerformed(java.awt.event.ActionEvent
> evt) {
> // Add your handling code here:
> if (importFile != null)
> if (!importRunning) {
>
> SwingUtilities.invokeLater(new Runnable() {
> public void run() {
> doImport(importFile);
> }
> });
> } else {
> System.out.println("Still importing ... ");
> }
> }
>
> /**
> * @param importFile
> */
> protected void doImport(File importFile) {
> // TODO Auto-generated method stub
> String delimiter = txtDelimiter.getText();
> if (delimiter == null || !delimiter.equals(""))
> delimiter = ";";
> try {
> br = new BufferedReader(new FileReader(importFile));
>
> ArrayList rows = new ArrayList();
> Object[] clmHeaders = null;
>
> String line = null;
> StringTokenizer tokenizer = null;
>
> int tCnt = -1;
>
> while ((line = br.readLine()) != null) {
> tokenizer = new StringTokenizer(line, delimiter);
> tCnt = tokenizer.countTokens();
> Object[] rowData = new Object[tCnt];
> int i = 0;
> while (tokenizer.hasMoreTokens())
> rowData[i++] = tokenizer.nextToken();
> rows.add(rowData);
> }
>
> clmHeaders = new Object[((Object[]) rows.get(0)).length];
>
> for (int i = 0; i < clmHeaders.length; i++) {
> clmHeaders[i] = "Column" + i;
> }
>
> Object[][] oArray = new Object[tCnt][];
> int lstSize = rows.size();
> for (int i = 0; i < lstSize; i++)
> oArray[i] = (Object[]) rows.get(i);
>
> model = new DefaultTableModel(oArray, clmHeaders);
>
> jTable1.setModel(model);
> jTable1.updateUI();
>
> System.out.println("Import complete!");
>
> } catch (FileNotFoundException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
>
> }
>
> private void btnChoseFileActionPerformed(java.awt.event.ActionEvent
> evt) {
> // Add your handling code here:
> if (chooser == null)
> chooser =
> new JFileChooser(new
> File(System.getProperty("user.dir")));
>
> chooser.showDialog(this, "load");
> importFile = chooser.getSelectedFile();
> if (importFile != null)
> txtPath.setText(importFile.getAbsolutePath());
> }
>
> /**
> * @param args the command line arguments
> */
> public static void main(String args[]) {
> new FileImport().show();
> }
>
> // Variables declaration - do not modify
> private JButton btnChoseFile;
> private JButton btnImport;
> private JPanel bgPanel;
> private JPanel tablePanel;
> private JPanel controlsPanel;
> private JScrollPane scrollPane;
> private JTable jTable1;
> private JLabel lblDelimiter;
> private JLabel lblPath;
> private JTextField txtDelimiter;
> private JTextField txtPath;
> // End of variables declaration
>
> }
>
> Then I try to read in a data table. file Size: 64MB, consisting of 7.2
> mio rows and 7 columns. When I try to read in the file, the
> java.lang.OutOfMemoryError occurs:Exception in thread
> "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
> at java.util.Arrays.copyOfRange(Unknown Source)
> at java.lang.String.<init>(Unknown Source)
> at java.io.BufferedReader.readLine(Unknown Source)
> at java.io.BufferedReader.readLine(Unknown Source)
> at FileImport.doImport(FileImport.java:180)
> at FileImport$3.run(FileImport.java:153)
> at java.awt.event.InvocationEvent.dispatch(Unknown Source)
> at java.awt.EventQueue.dispatchEvent(Unknown Source)
> at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
> Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> at java.awt.EventDispatchThread.run(Unknown Source)
>
> My system:
>
> Pentium Dual Core CPU, 3.21 GB RAM, Windows XP
>
> Eclipse:
> Eclipse IDE for Java Developers
>
> Version: Helios Service Release 2
> Build id: 20110218-0911
>
> In the Eclipse.ini I tried the following:
>
> -startup
> plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
> --launcher.library
> plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.2.R36x_v20101222
> -product
> org.eclipse.epp.package.java.product
> --launcher.defaultAction
> openFile
> -showsplash
> org.eclipse.platform
> --launcher.XXMaxPermSize
> --launcher.defaultAction
> openFile
> -vm
> c:\Programme\Java\jre1.5.0_15\bin\javaw.exe
> -vmargs
> -Dosgi.requiredJavaVersion=1.5
> -XX:+AggressiveHeap this produces the java.lang.OutOfMemoryError.
>
> The same if I change -XX:+AggressiveHeap to
> -Xmx1024m
>
> or to
> -Xmx1500m
>
> Changing it to -Xmx2048m Eclipse says at startup "Cannot create Java
> Virtual Maschine".
>
> The interesting thing is, when I monitor my RAM-consumption
> (TaskManager), my computer 'consumes' round about 256MB of RAM while
> loading the table, but then stops with the above mentioned error,
> which males me think, I am doing sth wrong, so to say, I think I am
> not configurating my system correctly. Do you have any clou, how I
> could double check my settings of the heap size? Or do you even have a
> guessing what might go wrong?
>
> Thanks,
>
> Raffael.
>
Previous Topic:Eclipse debugger freezes during "step over"
Next Topic:How to convert NetBeans project to Eclipse
Goto Forum:
  


Current Time: Fri Apr 26 06:37:11 GMT 2024

Powered by FUDForum. Page generated in 0.02712 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top