Reduce SQLDeveloper memory footprint with JDK 1.7

Hi!
Some time ago in another thread (Re: Memory problems with Oracle sql developer there was a suggestion to try the new Garbage-First Garbage Collector. which should be production in JDK 1.7.
I use SQLDeveloper with JDK 1.7 on 64bit Linux with good results:
- everything feels faster, snappier
- fonts rendering is different, but it is OK
- the bugs noted in other threads are not a showstopper for me (the connections pane not showing up on startup, not being able to scroll more than 1 OCI array size of records in results grid)
In the above mentioned thread there is a suggestion that the new garbage collector should improve memory footprint of SQLDeveloper, however, this is not my experience, since it behaves pretty much the same as with JDK 1.6 (resident size between 700 and 900 MB).
Do I need to use these opotions (as per reffering thread) to enable the new garbage collector (see below) or is it switched on by default in JDK 1.7? The reduced memory footprint would be very welcomed, because I use Oracle Warehouse Builder at the same time (also a java app) and there is always much pressure on memory.
AddVMOption -XX:+UnlockExperimentalVMOptions
AddVMOption -XX:+UseG1GC
AddVMOption -XX:+G1YoungGenSize=25m
AddVMOption -XX:+G1ParallelRSetUpdatingEnabled
AddVMOption -XX:+G1ParallelRSetScanningEnabled
Thanx
Aleksander

Hi Aleksander,
Glad to hear of your good report on Java 7's HotSpot VM regarding performance -- it has various enhancements, of which the new garbage collector is just one. In terms of interpreting memory footprints, take a look at:
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#generation_sizing
Note the diagram indicates total heap size does not include the permanent generation memory. Xmx limits the heap size (the young and tenured generation). MaxPermSize limits class and method metadata plus static variable content. (Apparently starting back in Java 5 there are even some cases where the permanent generation space can be shared by multiple VM instances to improve start-up time and reduce memory usage.) These two limits control distinct, non-overlapping areas of memory.
When monitoring a Java application's heap consumption with a profiling tool, I doubt the reported usage will exceed the Xmx limit by much. Monitoring with Windows Task Manager, however, can be a bit misleading. I have read several critiques in years past on how Task Manager reports program memory consumption. "Mem Usage" is actually the working set size. "VM Size" is program private memory rather than the true virtual size. And who knows how it tracks the Java VM's permanent generation size. Will it depend on whether it is shared or not?
So I cannot really recommend any additional parameters to you. Just trust in the Xmx setting and hope that SQL Developer keeps any memory leaks to a minimum.
Hope this helps,
Gary

Similar Messages

  • Reducing JRE memory footprint

    I want to deploy what may turn out to be a JavaSpaces application on some Windows PC clients. These clients will receive event notifications from a central server and then pop up a GUI for the user to respond to. These clients may be memory-limited and am worried about deploying a J2SE runtime purely for this application and eating up 30+Mb of RAM.
    J2ME runtime seemed like it offered hope as regards reducing memory footprint but doesn't really seem aimed at a standard PC.
    Does anyone have any advice as to which direction I should go in as regards JRE ?
    Gary Roussak

    Not all of the virtual memory assigned to a process is a problem - you need to look at the amount of memory that is commited (i.e. consumes pages of RAM and/or disk) to the process and not shared with other processes. Furthermore, the working set (the memory that has been recently accessed and needs to be in memory to avoid thrashing) is often much smaller than that.
    You can substantially reduce the private memory needed by the JVM by minimizing the heap size (-Xmx and -Xms parameters) - I've been able to run real programs accessing databases in as little as 2MB of heap.
    Chuck

  • Memory problem with jdk/jre 1.1.8

    My name is BERGMANN Yannick.
    I'm working for IRM in Li?ge and we developped an application (user interface for an industrial measurement system) in Java (JDK/JRE version : 1.1.8).
    We have a big memory problem with this application :
    - This user interface is running on a WINDOWS NT PC with 128MB.
    - This is the command to lanch our application :
    C:\Program Files\JavaSoft\JRE\1.1\bin\jrew.exe" -ms32m -mx32m -cp "\Program Files\HMI\HMI.zip;\Velocis\Add_On\Jdbc\raima.jar;\Program Files\Swing-1.1.1\swingall.jar" be.irm.hmi.kernel.HMI -t15 -d"Velocis rdstcp" -newdb -mf1m -mr20
    - When our application is running, everything seems to be OK in memory for it. The garbage collector seems to work properly and our application has always at least 5MB free memory (We use the java instruction "Runtime.getRuntime().freeMemory()" to know this).
    - But when we look in the "Windows NT task manager" for the "jrew" application, the memory increases ALWAYS.
    - After 5 days our application is completely frozen and blocked ...???
    - here is a memory map of our Windows NT PC :
         "jre.exe"     "commit total"     "commit limit"     "commit peak"     "physical total"     "physical available"     "physical file cache"     
    Monday     92264     109256     194944     109424     130484     19492     6216     
    Thuesday     106196     123072     194944     123348     130484     6072     5840     
    Wednesday     110836     132288     194944     132416     130484     4408     5140     
    Thursday     108200     144980     194944     145140     130484     4888     5148     
    Friday     109440     158319     194944     161334     130484     4911     4992     
    Monday     111600     209060     228548     209148     130484     5184     3484     
    Have you any idea of what is happening with "jrew" in memory ?
    We have had this problem for six month and we are totaly out of idea.
    If you can give us any idea, we'll appreciate a lot.
    Thanks in advance,
    BERGMANN Yannick
    IRM SA - Software Engineer
    Tel. (32)4/239.90.10
    Tel. (32)4/239.90.74 (direct)
    Fax (32)4/263.40.97
    E-mail [email protected]

    We had a memory problem with a swing applet in our company. The major reason for this was that we added new components in a JTree and removed them later again, and the components we removed were never garbage collected. This was because with these components we added different listeners, and we didn't remove the listeners after we didn't need the components anymore. After we corrected this, the components where garbage collected.
    Perhaps it's a similar problem you have, or I have no idea. Check that you remove actionlisteners, mouselisteners etc from components you want to be garbage collected.
    You could also test your application with OptimizeIt to see what objects you create and how many you get of them over time: http://www.vmgear.com

  • Reducing JVM memory footprint

    I want to deploy what may turn out to be a JavaSpaces application on some Windows PC clients. These clients will receive event notifications from a central server and then pop up a GUI for the user to respond to. These clients may be memory-limited and am worried about deploying a J2SE runtime purely for this application and eating up 30+Mb of RAM.
    J2ME runtime seemed like it offered hope as regards reducing memory footprint but doesn't really seem aimed at a standard PC.
    Does anyone have any advice as to which direction I should go in as regards JRE ?
    Gary Roussak

    I haven't checked into it thoroughly, but I've heard repeatedly that 1.4 has a smaller ram footprint. It is still in beta, so that may not be the way you want to go, but you still may want to look into it.
    m

  • Out of memory Error with jdk 1.6

    Hello,
    I have a swing application launched on the client with the help of Java web start. The applications works fine in jre 1.4 and jre 1.5. The heap sizes are :
    initial-heap-size="5m" max-heap-size="24m"
    But when I run this using jre 1.6.0_05-b13, I am getting Out of memory Error, java heap size. And I see the memory usage is growing rapidly which I didn't notice in other jre versions (1.4 and 1.5).
    Does anyone have any idea on this?
    Thanks in advance,
    MR.

    Thanks for your response Peter. During my continuous testing I identified that error happens on jdk 1.5 also. And I have increased the min-heap-size to 24 MB and max-heap-size to 64 MB. But in that case also I noticed the out of memory error. The interesting thing is, the min-heap-size is never increased from 24MB and lot of free memory also.
    Memory: 24,448K Free: 12,714K (52%) ... completed.
    The Outofmemoryerror triggers from the reader thread which does the job of reading the data from the InputStream. One thing is we are continuously pushing more data on the output stream from the other end. Is that any limitation on InputStream which can hold some definite amount of data.
    Please throw some light on this.

  • Reducing the memory footprint of our Sybase ASE based SolMan install

    Hello All,
    We are doing a test install of SAP Solution Manager 7.01 on Sybase ASE 15.7.
    Since this is just a test setup, we started off with a lower-than-recommended hardware configuration (4 GB RAM only) due to time constraints and since we were 'assured' that we could do basic testing with this setup.
    While post install performance of SolMan was decent, performance during solman_setup (setting up technical monitoring) has become appalling. We are not able to complete the configuration process at all as the SolMan configuration web application has become very unpredictable and extremely slow.
    The SolMan install is centralized and on a windows 2008 box. Windows task manager shows consistent memory usage of up to 90 - 95%. We also tried reducing the total number of work processes to just 8 but that did not help much. We see in 'task manager > resource monitor' that sqlserver.exe process is taking a shareable working set close to 2 GB of RAM whereas the committed memory much less (34 MB). Please tell us about any memory optimization we can perform for SolMan / Sybase ASE in order to complete technical monitoring setup using Solman_setup. We were hoping that we could change the  'total logical memory' setting for the DB directly using DBACOCKPIT tcode (in order to reduce the max memory setting) but could not do so as the it seems to be read-only. We could not find much documentation/posts regarding memory optimization for the DB. Please help out. Thanks!
    -Regards,
    Arvind

    FWIW ... ASE's 'max memory' setting can be changed on the fly, while 'total logical memory' is a calculated value that you cannot change (ie, it's 'read only'; changing 'max memory' will cause 'total logical memory' to change automatically). [NOTE: DBACOCKPIT is a SAP-provided application that sits on top of ASE; while I know what's doable when connected directly to ASE I do not know if DBACOCKPIT has disabled the ability to change some configuration settings like 'max memory'.]
    As for the SolMan performance issues ... I'd recommend reposting your issue in the SAP Applications on ASE discussion group where you're likely to get the attention of more folks with SAP application (on ASE) experience.  (While someone may jump in here with SolMan suggestions, SolMan is a SAP application and this group isn't really geared towards SAP applications.)

  • Reducing the memory footprint of Sybase ASE

    Hello All,
    We are doing a test install of SAP Solution Manager 7.01 on Sybase ASE 15.7.
    Since this is just a test setup, we started off with a lower-than-recommended hardware configuration (4 GB RAM only) due to time constraints.
    While post install performance of SolMan was decent, performance during solman_setup (setting up technical monitoring) has become appalling. We are not able to complete the configuration process at all as the SolMan configuration web application has become very unpredictable and extremely slow.
    The SolMan install is centralized and on a windows 2008 box. Windows task manager shows consistent memory usage of up to 90 - 95%. We also tried reducing the total number of work processes to just 8 but that did not help much. We see in 'task manager > resource monitor' that sqlserver.exe process is committing close to 2 GB of RAM when in fact it seems to be using much lesser when seen directly in 'task manager > process tab'. Please tell us about any memory optimization we can perform for Sybase ASE in order to complete out Solman_setup. We were hoping that we could change the  'max memory'/'total logical memory' setting for the DB directly using DBACOCKPIT tcode but could not do so as the parameters seems to be read-only. We could not find much documentation regarding memory optimization for the DB. Please help out. Thanks!
    -Regards,
    Arvind

    FWIW ... ASE's 'max memory' setting can be changed on the fly, while 'total logical memory' is a calculated value that you cannot change (ie, it's 'read only'; changing 'max memory' will cause 'total logical memory' to change automatically). [NOTE: DBACOCKPIT is a SAP-provided application that sits on top of ASE; while I know what's doable when connected directly to ASE I do not know if DBACOCKPIT has disabled the ability to change some configuration settings like 'max memory'.]
    As for the SolMan performance issues ... I'd recommend reposting your issue in the SAP Applications on ASE discussion group where you're likely to get the attention of more folks with SAP application (on ASE) experience.  (While someone may jump in here with SolMan suggestions, SolMan is a SAP application and this group isn't really geared towards SAP applications.)

  • How to reduce memory footprint

    Hello, while I observed that Audition always loads whole audio document into memory, I'm having quite a problem when processing long multichannel audio files as the whole physical memory gets utilized instantly I'm getting exhaustive disk swapping. This is especially awkward for long operations. I'm having a question if there's a way to reduce the memory footprint, ie. to Audition loads into memory just the file part that it's just working with, or to turn off undo. I assume the rapid memory usage is caused by collecting undo data also, whose I don't need in most cases.

    You can use the Clear History button in the History page to clear all undo data or selectively clear individual steps from History.

  • SQL Developer Memory Footprint

    We're looking at replacing around 200 TOAD licenses with SQL Developer. The only technical concern is the memory footprint, as in many cases it would be run from a terminal server with dozens of people logging on. A VM Size of 150MB seems to be not unusual for SQL Developer, and that all adds up of course.
    Are there any recommendations for reducing the memory footprint, or at least not letting it get much higher than 150? Features that can be turned off by default, versions of JDK, etc?

    Hi,
    The memory consume is quite worrying.
    However change the code into VB / Delphi will lose its availability as Java's write once run anywhere. :-)
    You won't be able to use this tool on Solaris, Linux, and Mac without changing the code and compiler. Thus would be less acceptable.
    I wonder if limiting SQL Dev's initial class load would give impact on memory consume.
    And why it seems that Java's garbage collector didn't do any collecting since the memory gets higher and higher time by time.
    Or maybe the code doesn't allow the object's become collectable?
    I ever get memory reach up to 500MB after doing a canceled Export Wizard for USER.
    But..... memory would never come down.
    Regards,
    Buntoro

  • Memory leak with ThreadStackTrace in libjvm.so (jdk 1.5.0_11)

    I posted this initially in "Desktop > Runtime Environment > Java Runtime Environment (JRE)", but am reposting here since this may be a more appropriate place. Here's a link to the original post:
    http://forum.java.sun.com/thread.jspa?threadID=5156031&tstart=0
    I'm trying to track down the cause of some memory growth in a java application. In my tests, the java heap appears to remain stable, but the overall memory footprint of the jvm process continues to grow (observed with pmap).
    I've run my application with libumem and have found what appears to be the culprit, but the memory allocation is in libjvm.so and I'm looking for ideas what might cause it.
    uname -a for my host
    SunOS thehost 5.10 Generic_118822-18 sun4u sparc SUNW,Netra-440
    and I'm using Java 1.5.0_11
    Here is the trace from libumem:
    1f81c4c0::bufctl_auditADDR BUFADDR TIMESTAMP THREAD
    CACHE LASTLOG CONTENTS
    1f81c4c0 1f81a470 ac018b4577a0 7
    1f43f188 8cda6a4 0
    libumem.so.1`umem_cache_alloc+0x210
    libumem.so.1`umem_alloc+0x60
    libumem.so.1`malloc+0x28
    libjvm.so`void*os::malloc+0x28
    libjvm.so`void*ResourceObj::operator new+0x38
    libjvm.so`ThreadStackTrace::ThreadStackTrace #Nvariant 1+0x34
    libjvm.so`void VM_ThreadDump::doit+0xcc
    libjvm.so`void VM_Operation::evaluate+0x80
    libjvm.so`void VMThread::run+0x6e0
    libjvm.so`void*_start+0x208
    libc.so.1`_lwp_start
    It looks like this leak occurrs when getStackTrace() is called on a Thread.
    I've found that the included program will continually allocate memory on the process heap until the JVM cannot allocate memory and it exits with the following exception.
    Exception java.lang.OutOfMemoryError: requested 16 bytes for C_Heap: ResourceOBJ. Out of swap space?
    import java.lang.StackTraceElement;
    import java.lang.Thread;
    public class TraceIt {
    public static void main(String[] args) {
    System.out.println("Starting trace");
    int i = 0;
    while (true)
    if (i%100 == 0) System.out.println(i);
    StackTraceElement[] se = Thread.currentThread().getStackTrace();
    i++;
    } Any ideas what would cause this? Is it a JVM bug?

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6469701
    BTW, when you register to post on this site why isn't Cuba in the list of countries?

  • I'm on iTunes 11.0.0.63 for Windows. iTunes used to display the total number of songs in my library, along with total playtime and memory footprint, at the bottom of the window. How can I make it display this information like it used to?

    Hello! Thanks in advance for reading my question.
    so, I updated iTunes to 11.0.0.63 on Windows, and the new layout looks nice, but iTunes no longer gives my total song count, memory footprint, and total play-time at the bottom of the window, the way it used to. I just want to know how to get that info back. Thanks so much!

    Ctrl / or View > Show Status Bar should do it.
    Weirdly having turned mine on the menu is not there to hide it again and the shortcut doesn't work.
    tt2

  • Low Memory Footprint JVM needed, Please suggest.

    Hi guys,
    I want a light weight (low memory footprint) Java Virtual Machine compatible with Java 1.5. It should be open source. Can anybody suggest me please. I've googled and tried to use some JVMs like Kaffe and SableVM. But I want some reliable VM.
    Thanks,
    Dhaval.

    Dhaval.Yoganandi wrote:
    can you flash more light on it ?
    Dhaval.Yoganandi wrote:I'm currently using Sun JVM with Java 1.5 its taking 35-40 MB of RAM and 333 MB in VRAM. I need to make very low. how can I do that ? I've tried many options to start sun JVM but no luck.. Virtual Memory is reduced to 280MB nothing else.. I want it to consume Virtual Ram only 64MB and RAM only 30MB..
    You need to tell us what tool you are using to arrive at those numbers.

  • Memory Leak with JPopupMenu

    It seems there is a memory leak with JPopupMenu. The following program demonstrates this leak. If you run the program, click on show form, and then close the form, the used memory will be GCd appropriately. If you click on show form, then right click on the table to show the popup (even if you dont do anything else with the popup) then close the form, it never GCs the form. I've tried all kinds of crazy things, but I cant seem to find what is keeping the memory from being GCd.
    Peter
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.beans.PropertyChangeListener;
    import java.text.DecimalFormat;
    import java.util.Timer;
    import java.util.TimerTask;
    import java.util.Vector;
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JRadioButtonMenuItem;
    import javax.swing.JScrollPane;
    import javax.swing.JTabbedPane;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
    import javax.swing.table.AbstractTableModel;
    @SuppressWarnings("serial")
    public class TriState extends JPanel {
         private static final long               K               = 1024;
         private static final long               M               = K * K;
         private static final long               G               = M * K;
         private static final long               T               = G * K;
         protected static int ctr = 1;
         private JButton                              btnShow          = new JButton("Show Form");
         private JLabel                              lblMem          = new JLabel();
         private static final DecimalFormat     df               = new DecimalFormat("#,##0.#");
         protected Timer                              updateTimer     = new Timer();
         public TriState() {
              this.setLayout(new GridLayout());
              add(btnShow);
              add(lblMem);
              updateTimer.scheduleAtFixedRate(new UpdateTimerTask(), 1000, 1000);
              btnShow.addActionListener(new ActionListener() {
                   @Override
                   public void actionPerformed(ActionEvent e) {
                        FrmReferrals fr = new FrmReferrals();
                        fr.setVisible(true);
         class UpdateTimerTask extends TimerTask {
              public void run() {
                   SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                             dumpMemoryUsage();
         protected void dumpMemoryUsage() {
              System.gc();
              Long t = Runtime.getRuntime().totalMemory();
              long f = Runtime.getRuntime().freeMemory();
              String st = convertToStringRepresentation(t);
              String sf = convertToStringRepresentation(f);
              String su = convertToStringRepresentation(t - f);
              System.out.println("Total:" + st + "(" + t + ") Free:" + sf + "(" + f + ") Used:" + su + "(" + (t - f) + ")");
              lblMem.setText(su + "/" + st);
         public static String convertToStringRepresentation(final long value) {
              final long[] dividers = new long[]{T, G, M, K, 1};
              final String[] units = new String[]{"TB", "GB", "MB", "KB", "B"};
              if (value < 1)
                   throw new IllegalArgumentException("Invalid file size: " + value);
              String result = null;
              for (int i = 0; i < dividers.length; i++) {
                   final long divider = dividers;
                   if (value >= divider) {
                        final double dr = divider > 1 ? (double) value / (double) divider : (double) value;
                        result = df.format(dr) + units[i];
                        break;
              return result;
         private static void createAndShowGUI() {
              JFrame frame = new JFrame("SimpleTableDemo");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              // Create and set up the content pane.
              TriState newContentPane = new TriState();
              newContentPane.setOpaque(true); // content panes must be opaque
              frame.setContentPane(newContentPane);
              // Display the window.
              frame.pack();
              frame.setVisible(true);
         public static void main(String[] args) {
              javax.swing.SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                        createAndShowGUI();
         protected class PopupMenu extends JPopupMenu {
              public PopupMenu() {
                   JRadioButtonMenuItem item1 = new JRadioButtonMenuItem(new AbstractAction("Insert Item") {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                             System.out.println(e.getActionCommand());
                   item1.setActionCommand("Insert");
                   add(item1);
                   JRadioButtonMenuItem item2 = new JRadioButtonMenuItem(new AbstractAction("Delete Item") {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                             System.out.println(e.getActionCommand());
                   item2.setActionCommand("Delete");
                   add(item2);
         public class FrmReferrals extends JFrame {
              public FrmReferrals() {
                   super();
                   init();
              protected void init() {
                   jbInit();
              protected void closeIt() {
                   uninit();
              // variables here
              protected Dimension          dimPreferred     = new Dimension(1270, 995);
              protected JTabbedPane     tabbedPane          = new JTabbedPane();
              protected JTable          tblReferrals     = null;
              protected PopupMenu          popMenu           = new PopupMenu();
              protected void jbInit() {
                   setPreferredSize(dimPreferred);
                   setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                   setTitle("Referrals");
                   JPanel pnl = new JPanel();
                   pnl.setOpaque(false);
                   pnl.setLayout(new BorderLayout());
                   pnl.add(tabbedPane, BorderLayout.CENTER);
                   // put it all in the frame
                   add(pnl);
                   pack();
                   setLocationRelativeTo(null);
                   // init the table and model
                   ReferralsTableModel ctm = new ReferralsTableModel(buildDummyVector());
                   tblReferrals = new JTable(ctm);
                   tblReferrals.setComponentPopupMenu(popMenu);
                   tblReferrals.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                   tabbedPane.add(new JScrollPane(tblReferrals, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
                   addWindowListener(new WindowListener() {
                        @Override
                        public void windowActivated(WindowEvent e) {}
                        @Override
                        public void windowClosed(WindowEvent e) {}
                        @Override
                        public void windowClosing(WindowEvent e) {
                             closeIt();
                        @Override
                        public void windowDeactivated(WindowEvent e) {}
                        @Override
                        public void windowDeiconified(WindowEvent e) {}
                        @Override
                        public void windowIconified(WindowEvent e) {}
                        @Override
                        public void windowOpened(WindowEvent e) {}
              protected Vector<DBO_Referrals> buildDummyVector() {
                   Vector<DBO_Referrals> vr = new Vector<DBO_Referrals>();
                   for (int x = 0; x < 5000; x++) {
                        DBO_Referrals r = new DBO_Referrals(x+(5000*ctr));
                        vr.add(r);
                   return vr;
              protected void uninit() {
                   tblReferrals.setComponentPopupMenu(null);
                   for (Component c : popMenu.getComponents()) {
                        PropertyChangeListener[] pl = c.getPropertyChangeListeners();
                        for (PropertyChangeListener l : pl)
                             c.removePropertyChangeListener(l);
                        if (c instanceof JMenuItem) {
                             ActionListener [] al = ((JMenuItem)c).getActionListeners();
                             for (ActionListener l : al) {
                                  ((JMenuItem)c).removeActionListener(l);
                   popMenu = null;
              protected class DBO_Referrals {
                   protected long          id;
                   protected String     Employee;
                   protected String     Rep;
                   protected String     Asst;
                   protected String     Client;
                   protected String     Dates;
                   protected String     Status;
                   protected String     Home;
                   public DBO_Referrals(long id) {
                        this.id = id;
                        Employee = "Employee" + id;
                        Rep = "Rep" + id;
                        Asst = "Asst" + id;
                        Client = "Client" + id;
                        Dates = "Dates" + id;
                        Status = "Status" + id;
                        Home = "Home" + id;
                   public long getId() {
                        return id;
                   public String getEmployee() {
                        return Employee;
                   public String getRep() {
                        return Rep;
                   public String getAsst() {
                        return Asst;
                   public String getClient() {
                        return Client;
                   public String getDates() {
                        return Dates;
                   public String getStatus() {
                        return Status;
                   public String getHome() {
                        return Home;
              public class ReferralsTableModel extends AbstractTableModel {
                   protected Vector<DBO_Referrals>          data          = new Vector<DBO_Referrals>();
                   protected String[]                         sColumns     = {"id", "Employee", "Rep", "Assistant", "Client", "Date", "Status", "Home", "R"};
                   public ReferralsTableModel() {
                        super();
                   public ReferralsTableModel(Vector<DBO_Referrals> data) {
                        this();
                        this.data = data;
                   @SuppressWarnings("unchecked")
                   @Override
                   public Class getColumnClass(int col) {
                        switch (col) {
                             case 0 :
                                  return Long.class;
                             default :
                                  return String.class;
                   @Override
                   public int getColumnCount() {
                        return sColumns.length;
                   @Override
                   public int getRowCount() {
                        return data.size();
                   @Override
                   public Object getValueAt(int row, int col) {
                        if (row > data.size())
                             return null;
                        DBO_Referrals a = data.get(row);
                        switch (col) {
                             case 0 :
                                  return a.getId();
                             case 1 :
                                  return a.getEmployee();
                             case 2 :
                                  return a.getRep();
                             case 3 :
                                  return a.getAsst();
                             case 4 :
                                  return a.getClient();
                             case 5 :
                                  return a.getDates();
                             case 6 :
                                  return a.getStatus();
                             case 7 :
                                  return a.getHome();
                             case 8 :
                                  return "+";
                             default :
                                  return null;

    BTW instead of continually printing out the memory use a profiler (jvisualvm in the jdk/bin directory -> heapdump -> search on your class -> view in instances -> find nearest GC root).
    Looks like BasicPopupMenuUI doesn't remove a reference to the JRootPane immediately. As far as I can see it will be removed when another menu shows.
    As a hackish workaround you can try this in you FrmReferrals#uninit():
                for(ChangeListener listener : MenuSelectionManager.defaultManager().getChangeListeners()) {
                    if (listener.getClass().getName().contains("MenuKeyboardHelper")) {
                        try {
                            Field field = listener.getClass().getDeclaredField("menuInputMap");
                            field.setAccessible(true);
                            field.set(listener, null);
                        } catch (Exception e) {
                            // ignored
                        break;
                }Funnily enough though it isn't there when I reduce your code to a SSCCE:
    import java.awt.*;
    import javax.swing.*;
    public class TestBasicPopupMenuUILeak extends JFrame {
        public TestBasicPopupMenuUILeak() {
            super("Not collected right away");
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    JFrame frame = new JFrame("Test");
                    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    frame.getContentPane().add(
                            new JButton(new AbstractAction("Show frame") {
                                @Override
                                public void actionPerformed(ActionEvent e) {
                                    EventQueue.invokeLater(new Runnable() {
                                        public void run() {
                                            JLabel label = new JLabel(
    "Right click to show popup, then close this frame."
    + "The frame with not be GCed until another (popup) menu is shown.");
                                            JPopupMenu popup = new JPopupMenu(
                                                    "Popup");
                                            popup.add("Item");
                                            label.setComponentPopupMenu(popup);
                                            // named differently so you can find it
                                            // easily in your favorite profiler
                                            JFrame frame = new TestBasicPopupMenuUILeak();
                                            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                                            frame.getContentPane().add(label);
                                            frame.pack();
                                            frame.setLocationRelativeTo(null);
                                            frame.setVisible(true);
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
    }

  • How to minimize OC4J memory footprint?

    We use Oracle 9iAS R2 on a Windows 2K server with dual Xenons and 2 GB physical RAM as an integration server. There the various developers all have differenct OC4Js set up for testing. Now an Oracle rep once told us that many OC4Js within an iAS instance are no big deal because an OC4J had a memory footprint of about 3 MB RAM.
    That sounded too good to be true. And in our case, is isn't true - an OC4J takes up about 50 MB of RAM right after its start. I tried to minimize the Java heap through the OC4J server attbributes in Oracle Enterprise Manager (like "-Xms16") but that didn't make an ounce of a difference.
    So what's the memory footprint of an OC4J inside an iAS instance? And can I reduce it somehow?

    This must be a marketing gag. Client Swing Apps tend to consume more than 3MB.
    I'm not sure but I guess the iAS is the memory eater. We currently have a test installation on a Solaris machine and the iAS pages up to 3GB when accessing the enterprise manager web site. Have a look into the performance guide and try to switch off all unecessary things. Note that there are to different VM switches: -Xms configures the initial heap size a VM should have (growing is expensive) be whereas -Xmx configures the max size the heap can grow (wheares 64MB is default). Again the documenation says that 2MB is then min (not much availabe for OC4J).
    I've you found it - please tell me! :-)

  • JavaServer memory footprint - 80-100MB

    Hi,
    We are running WLE 5.1 (patch 63) on Solaris 7. Our WLE domain contains a
    combination of Java and C++ servers. We are concerned about the memory
    footprint of the Javaservers. On Solaris, the image size of each
    'JavaServer' ranges from 80MB up to 110MB. We are running up to 20
    Javaservers in each domain so obviously, we are very concerned about this in
    production. Even simpapp uses up to 50MB !
    Are there any good approaches to reduce the footprint of the Java servers
    e.g. Will combining multiple servers into a single VM (using the MODULE
    syntax) help ?
    We have tried the -mX etc. commands on the VM but with little impact or
    success.
    Thanks
    Dermot

    You can find out the address ranges for your young generation, old generation, and permanent generations by running with the -XX:+PrintHeapAtGC flag. That produces output meant for VM developers, but the information is there. You'll get something like Heap after GC invocations=2 (full 1):
    PSYoungGen      total 3584K, used 0K [0xffffffff38000000, 0xffffffff38400000, 0xffffffff78000000)
      eden space 3072K, 0% used [0xffffffff38000000,0xffffffff38000000,0xffffffff38300000)
      from space 512K, 0% used [0xffffffff38300000,0xffffffff38300000,0xffffffff38380000)
      to   space 512K, 0% used [0xffffffff38380000,0xffffffff38380000,0xffffffff38400000)
    PSOldGen        total 8192K, used 134K [0xfffffffeb8000000, 0xfffffffeb8800000, 0xffffffff38000000)
      object space 8192K, 1% used [0xfffffffeb8000000,0xfffffffeb8021a98,0xfffffffeb8800000)
    PSPermGen       total 24576K, used 2415K [0xfffffffe98000000, 0xfffffffe99800000, 0xfffffffeb8000000)
      object space 24576K, 9% used [0xfffffffe98000000,0xfffffffe9825bfd8,0xfffffffe99800000) showing your generations, in order: the permanent generation at [0xfffffffe98000000..0xfffffffeb8000000), the old generation at [0xfffffffeb8000000..0xffffffff38000000), and the young generation at [0xffffffff38000000..0xffffffff78000000). You should be able to match those address ranges up with the output of pmap to explain the pmap output. The collectors we have currently always map the heap as three separate (but adjacent) regions. The order of the generations is different for the different collectors, for obscure internal reasons. The address range shown will be reserved, but won't be committed unless you are using the space.
    That said, I don't know what your mapping is at 0000000100114000 is. Do you have any native libraries that malloc space?

Maybe you are looking for

  • Specifying table with jdbc-class-map-name

    Greetings How do I specify the name of the table to map to when using the jdbc- class-map-name hint? In my jdo file, I have specified: <class name="Customer" objectid-class="CustomerId"> <extension vendor-name="kodo" key="jdbc-class-map-name" value="

  • IPhoto Folder Structure

    Since installing iPhotot 6 I've noticed that the structure of my iPhoto library has changed. iPhoto 5 seemed to create folders that reflected the day, month, year and made it easy to locate photo for attaching to emails or inclusion in documents. iPh

  • How to install IIS in OBI

    It needs IIS before install BAM. But how to install IIS in OBI XP? Although I can find some VM image which already installed BAM. But I think this is not convenience. Thanks, Melody

  • Office 2012 with Config manager as a package

    Hi , i am installing office 2013 as a package (program) and using setup.exe /adminfile as a command line. Unfortunately setup fails with an error  as below. I have .msp file which i have copied to updates folder.  How do i make installtion silent for

  • RSBBS web address jump (goto)  loading content in customized browser window

    Hello, I use a RSBBS web adress jump to open a new browser window from an existent template. In the new browser window another parameterized template will be loaded to show some results. No problem till now. But in my specification this new browser w