JTable memory retention

I have a scenario where I have a window whose contents (a JTable) don't seem to get GCd. A ran a profiler, and the only reference to my JTable is a sun.awt.im.CompositionAreaHandler.
Some background:
This is a desktop app using a JDesktopPane and JInternalFrames.
I run my app and profiler. I open a JInternalFrame that contains a small, simple JTable with some data.
I close (and dispose) the JInternalFrame, but the JTable object still exists. The path to the GC root from the profiler is:
MyJTable <-
    clientComponent of sun.awt.im.CompositionAreaHandler <-
        compositionAreaHandler of sun.awt.im.InputMethodContext <-
            inputMethodWindowContext of sun.awt.im.InputContext [Class]I have waited, and forced GC, but the table still persists. As soon as I open another JInternalFrame (without my JTable in it), however, the table finally gets GCd.
What could my JTable possibly be doing that it's still being held on to? I have no idea what those Sun classes are or what they are doing.
The JTable in question is not a vanilla JTable. I have subclassed JTable, and done things like add Actions and mouselisteners and JPopupMenus to it. I assume this behavior is a consequence of one of these additional things I have done, but I have no clue what it may be, or how to even determine it.
Any ideas?

I don't think I am hanging onto the JInternalFrame anywhere.
I checked in the profiler, and there are no instances of JInternalFrames left.
I am using 1.6.0_04, I'll try the latest version and see if it makes any difference, although I probably won't be in a position to do so for a couple days.

Similar Messages

  • Jtable memory usage

    I have a legend that i use in my product that contains 2 color menu butons and some text. It used to be a graphic with all this stuff just painted on top of it and the two color menu buttons placed on top. I have converted it to a jtable with the color buttons and text loacated in the cells of the table. when i run a test on the old legend compared to the new legend, i get a memmory increase from 39 Mb to 52 Mb. I am just wondering if this is due to JTables using a lot more memory than my previouse implementation, or if this is some other underying problem. If any one could give me any insight into this issue I would really appreciate it. Thank you

    just thought I'd bump this up once to see if I might get an answer.

  • Could this work on Nvidia boards as well

    ?(  I found this on a Intel site about loading DDR ram and copied it.
    Remove the AGP video card before installing or upgrading memory to avoid interference with the memory retention mechanism.
    To be fully compliant with all applicable DDR SDRAM memory specifications, the board should be populated with DIMMs that support the Serial Presence Detect (SPD) data structure. This allows the BIOS to read the SPD data and program the chipset to accurately configure memory settings for optimum performance. If non-SPD memory is installed, the BIOS will attempt to correctly configure the memory settings, but performance and reliability may be impacted or the DIMMs may not function under the determined frequency.
    I don't know if Nvidia supports SPD but it makes sense as the memory control chip maybe picking up some info from the DDR on the video card.  
    I can't test this myself as I still don't have a working MSI board.

    Thanks Wonkanoby you saved me a whole lot of time. I am so desperate to get my dual mem to work that I didn't even think about the mechanical end (mem retension) WAT A BONEHEAD I BE
    What sisoft mem scores you getting in dual? I thinking of getting ram that works in dual but not sure if it's worth it.
    I'am getting around 3100/93% & 2800 83%
    Thanks

  • SCJP: Is it worth it?

    Is the SCJP certification considered to be impressive by most companies?
    Can it make the difference between being hired or not?
    Thanks

    Is the SCJP certification considered to beimpressive
    by most companies?Depends on the who and the company and the country.
    If a supervisor has taken and passed the exam, they
    might be impressed. The exam is very difficult, even
    for experience programmers.
    The exam is difficult for many people, but NOT because of the topics being covered.
    It's difficult because of the way the questions are worded, covering rather basic topics for the most part.
    The simple fact that kids fresh out of college who've never programmed before can cram for it for a few weeks and get high scores (in the 90% range) first try says enough.
    Now does it matter. Does the company actually check
    with Sun to see if a candidate is telling the truth?
    Has the company hired phony programmers in the past?
    Ah. But a lot of phony programmers are guys having high scores at certification exams without ever having used the knowledge those exams are supposed to test.
    >
    Can it make the difference between being hired ornot?
    I doubt it. Again, it depends on who is making the
    decision and the requirements of the position.
    Given 2 otherwise equally suitable candidates, it might make a difference.
    Otherwise, it might hinder you (personally, and it was that way in several companies I worked in, I'd rather hire someone with more formal education than someone with a lot of certificates, especially if there was no work experience to back up those certs) .
    Is it still worth it to take the exam? Yes, it will
    be a good excercise. If you pass the exam, then youStudying for the exam can help highlight gaps in your knowledge, having a set date to gain that knowledge can be a good incentive to sit down with those books that you've had sitting in your bookcase but never got around to read.
    That, and the satisfaction of a nice score, are the real benefits.
    resume will NOT do the trick. There are many
    programmers that put SCJP that never get certified
    and never take the exam, yet they put it on their
    resume and lie about their achievements. When theNever heard of that happening. It's fraud and can get you fired.
    tough projects come, they typically fold under
    pressure and leave or get their employment contract
    axed.
    Most people who end up like that DID in fact pass the exam but passed it without actually knowing their stuff.
    They crammed for a few weeks, leaving them with short term memory retention of enough data to pass the exam but no real knowledge and long term retention (which comes only from actively using that knowledge for a prolonged period of time).
    They then fail under pressure because they've forgotten everything again, just like what happens to many kids in school who don't do their homework but cram for tests.
    And that is the Truth Ruth :o)

  • Retentive memory on Compact RIO product

    Hello everybody,
    I'm developing an industrial application with a real time system cRIO.
    In case of power down or a simply shutdown, the next boot I need to load data as set before.
    I want to avoid heavy disk writing to preserve system life and CPU resources, so I'd like to know if there is a sort of retentive memory on theese systems.
    The system should work stand alone without communicate with other devices.
    Regards.

    Hi Marcello,
    the cRIOs use a flash drive to store data as well as all OS relevant files. Your program is stored in the flash drive too.
    On execution the program is loaded into RAM.
    Please look up the specifications of your cRIO. You will find two values specifying flash size as well as RAM size!
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Cannot remove JTable from memory

    Hi,
    I am new to this forum so please forgive me if I make some naive errors. We are developing a component-based software in which the GUI can respond to a user's click to show a JTable in a JPanel. Because the loading of the JTable might take a while since some of our data can have a million columns (I cannot help that), we used a thread to manage the loading of the JTable. So the process is as followed:
    1. In a method called "invokeThread", we first get an instance of the JTable as in the code (IVComponent is an interface that our JTable-derived table implements):
    final IVComponent returnComponent = VComponentLoader.getVisualization(tableName);2. Then in the method "invokeThread", we start a thread and uses the SwingUtilities.invokeLater() to load the JTable:
            Thread executeThread = new Thread ("Table Thread") {
                public void run () {
                    SwingUtilities.invokeLater (new Runnable () {
                        public void run () {
                            loadTable(returnComponent);                       
            executeThread.start ();3. The "loadTable" method is in the same class as the "invokeThread" class. It loads data into the JTable.
    This works fine to load the data into the JTable. However, once the JTable's use is finished and the user wants to get rid of it to save on JVM memory, we allow the user to delete that JTable. Now the reason I am asking for help is that although we can set the JTable to null or set its TableColumnModel to null before setting JTable to null, we found that the TableColumns in the TableColumnModel are still on the heap using Eclipse's memory analyzer or Netbean's profiler. We were surprised that neither tool told us which object held them in memory, though.
    We have looked on the web for a while. First we thought the "final" keyword might be the problem but using an instance variable for the class in which the method "invokeThread" resides did not help. We have seen other people reporting similar issues with other swing components but has yet to find a solution or a work-around that works for us.
    Thanks in advance for your help.
    John

    Thanks, PhHein. If we can bribe the GC, we will :-).
    I guess my question is whether this is something we need to do to ensure that GC will collect the memory once we set the JTable to null. From what we gathered on the web, one possible reason for the GC not to touch the JTable is that there is another reference to the JTable object (or its sub-components?) that we are not aware of. We saw a few posts mentioning the listeners added by a static object. Don't know if it applies to our situation because although we did not add any listener this way, we don't know whether by using JTable and TableColumnModel, a listener is added for us by a static object.
    With limited exposure to the development community, we don't know the scope of the issue we encountered. We have seen a few bug reports in sun development network but they were quite old. If this is a well-known issue for Swing components that is yet to be fully addressed, then we have to bite the bullet for now. If there is a solution either offered by sun or by some experts, we will be grateful if you guys can point the way.
    Best,
    John

  • How can I use retentive memory?

    I need to make a report of good/bad parts in daily an mothly basis, I want to put this data on a indicator but a dont want that this value get lost went the operator turn of the machine at the end of the shift. Does anybody knows how can i use some retentive variable? or other solution?

    This is pretty comnonly done with saving the values to an ini file. A more professional version would be saving to a network database so everyone could have access to the information at any time and without needing to run your program.

  • ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exi

    Hi all,
    suddenly our oracle 10g database stopped working. When we tried export the database following was the output
    C:\Documents and Settings\Administrator>EXP PMIS/PMIS FILE=C:\PMIS.DMP
    Export: Release 10.2.0.1.0 - Production on Wed Mar 25 16:15:08 2009
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    EXP-00056: ORACLE error 1034 encountered
    ORA-01034: ORACLE not available
    ORA-27101: shared memory realm does not exist
    EXP-00005: all allowable logon attempts failed
    EXP-00000: Export terminated unsuccessfullyalert log file had the output as
    Wed Mar 25 16:02:12 2009
    Starting ORACLE instance (normal)
    LICENSE_MAX_SESSION = 0
    LICENSE_SESSIONS_WARNING = 0
    Picked latch-free SCN scheme 2
    Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST
    Autotune of undo retention is turned on.
    IMODE=BR
    ILAT =10
    LICENSE_MAX_USERS = 0
    SYS auditing is disabled
    ksdpec: called for event 13740 prior to event group initialization
    Starting up ORACLE RDBMS Version: 10.2.0.1.0.
    System parameters with non-default values:>sessions = 49
    >__shared_pool_size = 71303168
    >__large_pool_size = 8388608
    >__java_pool_size = 4194304
    >__streams_pool_size = 0
    >spfile = C:\ORACLEXE\APP\ORACLE\PRODUCT\10.2.0\SERVER\DBS\SPFILEXE.ORA
    >sga_target = 146800640
    >control_files = C:\ORACLEXE\ORADATA\XE\CONTROL.DBF
    >__db_cache_size = 58720256
    >compatible = 10.2.0.1.0
    >db_recovery_file_dest = C:\oraclexe\app\oracle\flash_recovery_area
    >db_recovery_file_dest_size= 10737418240
    >undo_management = AUTO
    >undo_tablespace = UNDO
    >remote_login_passwordfile= EXCLUSIVE
    >dispatchers = (PROTOCOL=TCP) (SERVICE=XEXDB)
    >shared_servers = 4
    >job_queue_processes = 4
    >audit_file_dest = C:\ORACLEXE\APP\ORACLE\ADMIN\XE\ADUMP
    >background_dump_dest = C:\ORACLEXE\APP\ORACLE\ADMIN\XE\BDUMP
    >user_dump_dest = C:\ORACLEXE\APP\ORACLE\ADMIN\XE\UDUMP
    >core_dump_dest = C:\ORACLEXE\APP\ORACLE\ADMIN\XE\CDUMP
    >db_name = XE
    >open_cursors = 300
    >os_authent_prefix =
    >pga_aggregate_target = 41943040
    PMON started with pid=2, OS id=1632
    PSP0 started with pid=3, OS id=1312
    MMAN started with pid=4, OS id=200
    DBW0 started with pid=5, OS id=1864
    LGWR started with pid=6, OS id=188
    CKPT started with pid=7, OS id=1328
    SMON started with pid=8, OS id=1848
    RECO started with pid=9, OS id=1760
    CJQ0 started with pid=10, OS id=1920
    MMON started with pid=11, OS id=768
    MMNL started with pid=12, OS id=948
    Wed Mar 25 16:02:13 2009
    starting up 1 dispatcher(s) for network address '(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...
    starting up 4 shared server(s) ...
    Oracle Data Guard is not available in this edition of Oracle.
    Wed Mar 25 16:02:13 2009
    alter database mount exclusive
    Wed Mar 25 16:02:17 2009
    Setting recovery target incarnation to 2
    Wed Mar 25 16:02:17 2009
    Successful mount of redo thread 1, with mount id 2563569989
    Wed Mar 25 16:02:17 2009
    Database mounted in Exclusive Mode
    Completed: alter database mount exclusive
    Wed Mar 25 16:02:17 2009
    alter database open
    Wed Mar 25 16:02:18 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_lgwr_188.trc:
    ORA-00600: internal error code, arguments: [3700], [1], [15], [2], [2], [], [], []
    Wed Mar 25 16:02:18 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_lgwr_188.trc:
    ORA-00600: internal error code, arguments: [3700], [1], [15], [2], [2], [], [], []
    Wed Mar 25 16:02:18 2009
    LGWR: terminating instance due to error 470
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_dbw0_1864.trc:
    ORA-00470: LGWR process terminated with error
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_ckpt_1328.trc:
    ORA-00470: LGWR process terminated with error
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_psp0_1312.trc:
    ORA-00470: LGWR process terminated with error
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_mman_200.trc:
    ORA-00470: LGWR process terminated with error
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_pmon_1632.trc:
    ORA-00470: LGWR process terminated with error
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_reco_1760.trc:
    ORA-00470: LGWR process terminated with error
    Wed Mar 25 16:02:19 2009
    Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_smon_1848.trc:
    ORA-00470: LGWR process terminated with error
    Instance terminated by LGWR, pid = 188Again when we tried by connecting sqlplus following was output
    SQL> connect sys/manager as sysdba
    Connected to an idle instance.
    SQL> startup
    ORACLE instance started.
    Total System Global Area 146800640 bytes
    Fixed Size 1286220 bytes
    Variable Size 83890100 bytes
    Database Buffers 58720256 bytes
    Redo Buffers 2904064 bytes
    Database mounted.
    ORA-03113: end-of-file on communication channelWe actually need database dump for user PMIS, any help would be highly appreciated

    Hi Wim
    You should say that "It may be Control File problem", but you shouldn't say that "it's due to Control File" problem
    Please refer to Errors Documentation for more information on ORA-00600
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14219/e0.htm#sthref371
    ORA-00600: internal error code, arguments: [string], [string], [string], [string], [string], [string], [string], [string]
    Cause: This is the generic internal error number for Oracle program exceptions. This indicates that a process has encountered an exceptional condition.
    Action: Report as a bug - the first argument is the internal error number
    Kamran Agayev A. (10g OCP)
    http://kamranagayev.wordpress.com

  • JTable and ResultSet TableModel with big resultset

    Hi, I have a question about JTable and a ResultSet TableModel.
    I have to develop a swing JTable application that gets the data from a ResultSetTableModel where the user can update the jtable data.
    The problem is the following:
    the JTable have to contain the whole data of the source database table. Currently I have defined a
    a TYPE_SCROLL_SENSITIVE & CONCUR_UPDATABLE statement.
    The problem is that when I execute the query the whole ResultSet is "downloaded" on the client side application (my jtable) and I could receive (with big resultsets) an "out of memory error"...
    I have investigate about the possibility of load (in the client side) only a small subset of the resultset but with no luck. In the maling lists I see that the only way to load the resultset incrementally is to define a forward only resultset with autocommit off, and using setFetchSize(...). But this solution doesn't solve my problem because if the user scrolls the entire table, the whole resultset will be downloaded...
    In my opinion, there is only one solution:
    - create a small JTable "cache structure" and update the structure with "remote calls" to the server ...
    in other words I have to define on the server side a "servlet environment" that queries the database, creates the resultset and gives to the jtable only the data subsets that it needs... (alternatively I could define an RMI client/server distribuited applications...)
    This is my solution, somebody can help me?
    Are there others solutions for my problem?
    Thanks in advance,
    Stefano

    The database table currently is about 80000 rows but the next year will be 200000 and so on ...
    I know that excel has this limit but my JTable have to display more data than a simple excel work sheet.
    I explain in more detail my solution:
    whith a distribuited TableModel the whole tablemodel data are on the server side and not on the client (jtable).
    The local JTable TableModel gets the values from a local (limited, 1000rows for example) structure, and when the user scroll up and down the jtable the TableModel updates this structure...
    For example: initially the local JTable structure contains the rows from 0 to 1000;
    the user scroll down, when the cell 800 (for example) have to be displayed the method:
    getValueAt(800,...)
    is called.
    This method will update the table structure. Now, for example, the table structure will contain data for example from row 500 to row 1500 (the data from 0 to 499 are deleted)
    In this way the local table model dimension will be indipendent from the real database table dimension ...
    I hope that my solution is more clear now...
    under these conditions the only solutions that can work have to implement a local tablemodel with limited dimension...
    Another solution without servlet and rmi that I have found is the following:
    update the local limited tablemodel structure quering the database server with select .... limit ... offset
    but, the select ... limit ... offset is very dangerous when the offset is high because the database server have to do a sequential scan of all previuous records ...
    with servlet (or RMI) solution instead, the entire resultset is on the server and I have only to request the data from the current resultset from row N to row N+1000 without no queries...
    Thanks

  • Memory errors in alert log

    Working on following environment:
    Platform -> Windows Server 2003 Version V5.2 Service Pack 2 32-bit
    Oracle Database -> 10.2.0.1
    My database was going to shutdown(auto) after 5 minutes of database startup. When I investigate alert log got following messages in it:
    Memory Notification: Library Cache Object loaded into SGA
    Heap size 2210K exceeds notification threshold (2048K)
    KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw==
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_ckpt_7024.trc:
    ORA-04030: out of process memory when trying to allocate 8716 bytes (pga heap,Get krha asynch mem)
    CKPT: terminating instance due to error 4030
    Mon Mar 14 11:05:30 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_q001_5816.trc:
    ORA-04030: out of process memory when trying to allocate bytes (,)
    Then I follow metalink note 330239.1 and got the issue resolved related to "shutdown" but getting some new error messages in alert log. Please see the below error messages:
    Thread 1 cannot allocate new log, sequence 77933
    Private strand flush not complete
    Current log# 2 seq# 77932 mem# 0: D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\REDO0_02.LOG
    Thread 1 advanced to log sequence 77933
    Current log# 1 seq# 77933 mem# 0: D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\REDO0_01.LOG
    Mon Mar 14 12:34:08 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_smon_7300.trc:
    ORA-00604: error occurred at recursive SQL level 2
    ORA-04030: out of process memory when trying to allocate 404 bytes (Typecheck,seg:kggfaAllocSeg)
    Mon Mar 14 12:49:00 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_j000_7060.trc:
    ORA-12012: error on auto execute of job 27
    ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
    Mon Mar 14 12:49:34 2011
    Process startup failed, error stack:
    Mon Mar 14 12:49:35 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_psp0_6908.trc:
    ORA-27300: OS system dependent operation:spcdr:9261:4200 failed with status: 997
    ORA-27301: OS failure message: Overlapped I/O operation is in progress.
    ORA-27302: failure occurred at: skgpspawn
    Mon Mar 14 12:49:35 2011
    Process J001 died, see its trace file
    Mon Mar 14 12:49:35 2011
    kkjcre1p: unable to spawn jobq slave process
    Mon Mar 14 12:49:36 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_cjq0_6280.trc:
    Mon Mar 14 12:53:51 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_j000_7060.trc:
    ORA-07445: exception encountered: core dump [ACCESS_VIOLATION] [unable_to_trans_pc] [PC:0x603F1A55] [ADDR:0xBB] [UNABLE_TO_READ] []
    Mon Mar 14 12:53:53 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_j000_7060.trc:
    ORA-04030: out of process memory when trying to allocate 753120 bytes (pga heap,kco buffer)
    ORA-07445: exception encountered: core dump [ACCESS_VIOLATION] [unable_to_trans_pc] [PC:0x603F1A55] [ADDR:0xBB] [UNABLE_TO_READ] []
    Mon Mar 14 12:54:53 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_q000_5424.trc:
    ORA-04030: out of process memory when trying to allocate 123404 bytes (QERHJ hash-joi,kllcqas:kllsltba)
    Mon Mar 14 13:21:24 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_mmon_7444.trc:
    ORA-00600: internal error code, arguments: [kspcsetsp3], [], [], [], [], [], [], []
    Mon Mar 14 13:21:27 2011
    Errors in file d:\oracle10g\product\10.2.0\admin\ndb\bdump\ndb_mmon_7444.trc:
    ORA-00600: internal error code, arguments: [kmgs_parameter_update_timeout_1], [600], [], [], [], [], [], []
    ORA-00600: internal error code, arguments: [kspcsetsp3], [], [], [], [], [], [], []
    Mon Mar 14 13:22:26 2011
    Restarting dead background process MMON
    MMON started with pid=11, OS id=7304
    Mon Mar 14 13:44:51 2011
    Thread 1 advanced to log sequence 77934
    Current log# 3 seq# 77934 mem# 0: D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\REDO0_03.LOG
    Mon Mar 14 13:51:20 2011
    Thread 1 advanced to log sequence 77935
    Current log# 2 seq# 77935 mem# 0: D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\REDO0_02.LOG
    kindly help me out in this, as this is PRODUCTION database.
    Regards,

    Please see the parameter values extracted from the alert log:
    Adjusting the default value of parameter parallel_max_servers
    from 160 to 135 due to the value of parameter processes (150)
    Mon Mar 14 12:18:53 2011
    Starting ORACLE instance (normal)
    LICENSE_MAX_SESSION = 0
    LICENSE_SESSIONS_WARNING = 0
    Picked latch-free SCN scheme 2
    Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST
    Autotune of undo retention is turned on.
    IMODE=BR
    ILAT =18
    LICENSE_MAX_USERS = 0
    SYS auditing is disabled
    ksdpec: called for event 13740 prior to event group initialization
    Starting up ORACLE RDBMS Version: 10.2.0.1.0.
    System parameters with non-default values:
    processes = 150
    sga_max_size = 1577058304
    __shared_pool_size = 125829120
    __large_pool_size = 8388608
    __java_pool_size = 8388608
    __streams_pool_size = 0
    sga_target = 1258291200
    control_files = D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\CONTROL01.CTL, D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\CONTROL02.CTL, D:\ORACLE10G\PRODUCT\10.2.0\ORADATA\NDB\CONTROL03.CTL
    db_block_size = 8192
    __db_cache_size = 1107296256
    compatible = 10.2.0.1.0
    db_files = 600
    db_file_multiblock_read_count= 16
    db_recovery_file_dest = d:\oracle10g\product\10.2.0/flash_recovery_area
    db_recovery_file_dest_size= 2147483648
    undo_management = AUTO
    undo_tablespace = UNDOTBS2
    kgllarge_heap_warning_threshold= 8388608
    remote_login_passwordfile= EXCLUSIVE
    db_domain =
    dispatchers = (PROTOCOL=TCP) (SERVICE=ndbXDB)
    job_queue_processes = 10
    audit_file_dest = D:\ORACLE10G\PRODUCT\10.2.0\ADMIN\NDB\ADUMP
    background_dump_dest = D:\ORACLE10G\PRODUCT\10.2.0\ADMIN\NDB\BDUMP
    user_dump_dest = D:\ORACLE10G\PRODUCT\10.2.0\ADMIN\NDB\UDUMP
    core_dump_dest = D:\ORACLE10G\PRODUCT\10.2.0\ADMIN\NDB\CDUMP
    db_name = ndb
    open_cursors = 300
    pga_aggregate_target = 838860800
    Regards,
    Edited by: user12194837 on Mar 14, 2011 3:55 AM

  • JTable in Form

    Dear friends
    I searched how can I make a gride (like excel gride) in oracle form and I'll have the followin control : sort on column , resize column and move column between eachother, then I read I must use JTable with Bean Area in oracle form( I'm not sure is it correct or not), But I couldn't find how I can do it.
    If I can do it with JTable and Bean Area please tell me step by step the method.
    Thanks alot

    I don't know how to run java console, but on the form I get When New Record Instance from the beginning of form running.Nothing else.
    Where is the Java console? How can I run it?
    When I run the form and try to open sun java console from internet explorer, explorer closes.
    While form is running before update I opened java.exe, it closes also.
    Java Console things
    Oracle JInitiator: Version 1.3.1.22
    Using JRE version 1.3.1.22-internal Java HotSpot(TM) Client VM
    User home directory = C:\Documents and Settings\JALEO
    User has overriden browser's proxy settings.
    Proxy Configuration: no proxy
    JAR cache enabled
    Location: C:\Documents and Settings\JALEO\Oracle Jar Cache
    Maximum size: 50 MB
    Compression level: 0
    c: clear console window
    f: finalize objects on finalization queue
    g: garbage collect
    h: display this help message
    l: dump classloader list
    m: print memory usage
    q: hide console
    s: dump system properties
    t: dump thread list
    x: clear classloader cache
    0-5: set trace level to <n>
    Loading http://jaleo.sarar.com.tr:8890/forms/java/frmall_jinit.jar from JAR cache
    java.io.FileNotFoundException: File not found: http://jaleo.sarar.com.tr:8890/forms/java/icons.jar
         at sun.plugin.protocol.jdk12.http.HttpURLConnection.getInputStream(Unknown Source)
         at oracle.jre.protocol.jar.HttpUtils.followRedirects(Unknown Source)
         at oracle.jre.protocol.jar.JarCache$CachedJarLoader.download(Unknown Source)
         at oracle.jre.protocol.jar.JarCache$CachedJarLoader.load(Unknown Source)
         at oracle.jre.protocol.jar.JarCache.get(Unknown Source)
         at oracle.jre.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
         at oracle.jre.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
         at sun.misc.URLClassPath$JarLoader.getJarFile(Unknown Source)
         at sun.misc.URLClassPath$JarLoader.<init>(Unknown Source)
         at sun.misc.URLClassPath$2.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         at sun.misc.URLClassPath.getLoader(Unknown Source)
         at sun.misc.URLClassPath.getLoader(Unknown Source)
         at sun.misc.URLClassPath.getResource(Unknown Source)
         at java.net.URLClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(Unknown Source)
         at sun.applet.AppletClassLoader.findClass(Unknown Source)
         at sun.plugin.security.PluginClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClassInternal(Unknown Source)
         at java.lang.Class.forName0(Native Method)
         at java.lang.Class.forName(Unknown Source)
         at oracle.ewt.util.FocusUtils.<clinit>(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.<clinit>(Unknown Source)
         at oracle.ewt.laf.oracle.OracleLookAndFeel._initCommonFixedDefaults(Unknown Source)
         at oracle.ewt.laf.oracle.OracleLookAndFeel._getCommonDefaults(Unknown Source)
         at oracle.ewt.laf.oracle.OracleLookAndFeel._getIndexedDefaults(Unknown Source)
         at oracle.ewt.laf.oracle.OracleLookAndFeel.getDefaults(Unknown Source)
         at oracle.ewt.lwAWT.BufferedApplet.getUIDefaults(Unknown Source)
         at oracle.ewt.lwAWT.BufferedApplet.<init>(Unknown Source)
         at oracle.ewt.swing.JBufferedApplet.<init>(Unknown Source)
         at oracle.forms.engine.Main.<init>(Unknown Source)
         at java.lang.Class.newInstance0(Native Method)
         at java.lang.Class.newInstance(Unknown Source)
         at sun.applet.AppletPanel.createApplet(Unknown Source)
         at sun.plugin.AppletViewer.createApplet(Unknown Source)
         at sun.applet.AppletPanel.runLoader(Unknown Source)
         at sun.applet.AppletPanel.run(Unknown Source)
         at java.lang.Thread.run(Unknown Source)
    WARNING: Unable to cache http://jaleo.sarar.com.tr:8890/forms/java/icons.jar
    Loading http://jaleo.sarar.com.tr:8890/forms/java/frmwebutil.jar from JAR cache
    Loading http://jaleo.sarar.com.tr:8890/forms/java/jacob.jar from JAR cache
    Loading http://jaleo.sarar.com.tr:8890/forms/java/fjtable.jar from JAR cache
    proxyHost=null
    proxyPort=0
    connectMode=HTTP, native.
    Forms Applet version is : 10.1.2.0
    SET_DECIMAL_SEPARATORS:.,
    SET_DATE_FORMAT:dd/MM/yyyy
    SET_NUM_FORMAT:#0.00
    SET_INT_FORMAT:##########
    SET_IMAGE_SIZE:200,-1
    INIT:false
    *** raz ***
    SETSEPARATOR:^
    SETARRAYSIZE:4,5
    ArraySize : 4 columns 5 rows
    SETHEADER:ROWID^^DEPTNO^^DNAME^^LOC
    SET_COLS_TYPE:CHAR^INTEGER^CHAR^CHAR
    SETDATA:AAAMjTAAEAAAAEEAAA^10^ACCOUNTING^lDAHO
    SETDATA:AAAMjTAAEAAAAEEAAB^20^RESEARCH^DALLAS
    SETDATA:AAAMjTAAEAAAAEEAAC^30^SALES^CHICAGO
    SETDATA:AAAMjTAAEAAAAEEAAD^40^OPERATIONS^BOSTON
    SETDATA:AAAMjTAAEAAAAEHAAA^50^INFORMATION^LA
    SET_CELL_PROPERTY:ROWID|ENABLE|false
    prop=ENABLE value:false
    SET_CELL_PROPERTY:ROWID|WIDTH|5
    prop=WIDTH value:5
    SET_CELL_PROPERTY:ROWID|RESIZE|false
    prop=RESIZE value:false
    SET_CELL_PROPERTY:HIREDATE|BG_COLOR|230,230,255
    prop=BG_COLOR value:230,230,255
    Colulmn: HIREDATE not found. Unable to set property
    SET_CELL_PROPERTY:SAL|BG_COLOR|230,255,255
    prop=BG_COLOR value:230,255,255
    Colulmn: SAL not found. Unable to set property
    SET_CELL_PROPERTY:EMPNO|ENABLE|FALSE
    prop=ENABLE value:FALSE
    Colulmn: EMPNO not found. Unable to set property
    SET_CELL_PROPERTY:EMPNO|FG_COLOR|100,100,100
    prop=FG_COLOR value:100,100,100
    Colulmn: EMPNO not found. Unable to set property
    SET_CELL_PROPERTY:EMPNO|FONT|Tahoma|12|BI
    prop=FONT value:Tahoma
    Colulmn: EMPNO not found. Unable to set property
    SET_CELL_PROPERTY:EMPNO|WIDTH|50
    prop=WIDTH value:50
    Colulmn: EMPNO not found. Unable to set property
    SET_CELL_PROPERTY:EMPNO|MIN_WIDTH|40
    prop=MIN_WIDTH value:40
    Colulmn: EMPNO not found. Unable to set property
    SET_CELL_PROPERTY:EMPNO|MAX_WIDTH|100
    prop=MAX_WIDTH value:100
    Colulmn: EMPNO not found. Unable to set property
    SET_ROW_PROPERTY:HEIGHT|80
    SET_CELL_PROPERTY:PHOTO|WIDTH|200
    prop=WIDTH value:200
    Colulmn: PHOTO not found. Unable to set property
    SETBOUNDS:10,10,600,200
    x=10 y=10 w=600 h=200
    SETTITLE:Content of DEPT table
    SETHEADBG:0,130,255
    SETHEADFG:255,255,102
    SETDATABG:255,255,255
    SETUPDATE:TRUE
    SHOW:FALSE
    seperate=FALSE
    Exception occurred during event dispatching:
    java.lang.NoSuchMethodError
         at oracle.forms.fd.FJTable$2.mousePressed(FJTable.java:1252)
         at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at oracle.ewt.event.tracking.GlassMouseGrabProvider$Disp._redispatchEvent(Unknown Source)
         at oracle.ewt.event.tracking.GlassMouseGrabProvider$Disp.mousePressed(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.processEventImpl(Unknown Source)
         at oracle.ewt.event.tracking.GlassMouseGrabProvider$Proxy.processEventImpl(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.redispatchEvent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    Exception occurred during event dispatching:
    java.lang.NoSuchMethodError
         at oracle.forms.fd.FJTable$2.mousePressed(FJTable.java:1252)
         at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at oracle.ewt.event.tracking.GlassMouseGrabProvider$Disp._redispatchEvent(Unknown Source)
         at oracle.ewt.event.tracking.GlassMouseGrabProvider$Disp.mousePressed(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.processEventImpl(Unknown Source)
         at oracle.ewt.event.tracking.GlassMouseGrabProvider$Proxy.processEventImpl(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.redispatchEvent(Unknown Source)
         at oracle.ewt.lwAWT.LWComponent.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)

  • Update JTable from String[][]

    Hello everyone, I have a JTable with a slightly customized DefaultTableModel shown below:
    DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames){
         private static final long serialVersionUID = 8655602888381735851L;
         @Override
             public boolean isCellEditable(int row, int column)
                         return false;
              };rowData is a String[][] of my data. When a user clicks a button, they add a row of data to the String[][]. I am wondering how I can update the JTable to reflect this change in the String[][]. Thanks!

    The problem with that is that I'm going to be performing various searches through the data, and those searches are performed on a TreeMap.
    rowData gets its data from the TreeMap, and is then displayedThe active verb does not describe the situation accurately: according to your code, rowdata is merely built from the TreeMap instance, and stuffed into a DefaultTableModel for display.
    When the user adds data, they add it to the TreeMap so that it can be searched.
    I can easily convert the data from the TreeMap to the String[][], but I don't know how to "redraw" the table with the new data.I assume the data is too big to repeat the process each time the user adds a row (build the new String[][], wrap it into a new DefaultTableModel instance and set the instance as the table's model).
    Another way is to duplicate the structure: when the user adds a row, add it into the searchable collection, and into the table model. But this costs twice the memory, and, again, I assume your data set is too large.
    A third, probably more elegant way is to build your own TableModel implementation: it could store a reference to the TreeMap instance, and an array converting the table's row index values to the tree's key value. That way the table model can be described in the active mode:
    "the JTable asks the model for cell values, and the model asks the tree for the corresponding data" :o)

  • JLabel as cell of JTable

    Hi All,
    I am using JLabel as a cell of a JTable by overriding getTableCellRendererComponent method of the renderer.But I am not able to select/focus on any of the cell by clicking at cells.However If I use any other componenet like JTextArea, I can select any cell I want.
    I have to use JLabel because i want to put multiple color and fonts in a single cell.I dont't want to use JTextPane because it takes more memory as well as It has wraping problem
    Any help would be greatly appreciated

    It's not a good idea to create a NEW Component each and every time getXXXCellRenderer() is called. Object creation is VERY expensive!!!
    Remember, this Component is merely renderered (e.g. painted, or "rubber-stamped") into the Graphics Context of the JTable, after appropriate sizing to fit the cell, of course. So the SAME component can be used to render each and every cell, each and every time each cell needs to be rendered. (Unless different Component classes are used to render different cells, but still, one of each of these Components should be created in the Constructor, not each time a cell is rendered.)
    I have reworked your code to make it much more efficient, and to make it more readable:
    public class MyTableCellRenderer
        implements TableCellRenderer
        JLabel label = new JLabel();
        public MyTableCellRenderer()
            super();
            this.label.setOpaque(true);
        public Component getTableCellRendererComponent( JTable  table,
                                                        Object  value,
                                                        boolean isSelected,
                                                        boolean hasFocus,
                                                        int     row,
                                                        int     column )
            String st=null;
            st="<HTML><B><FONT Color=Red>" + value.toString() 
               + "</FONT></B></HTML>";
            this.label.setText(st);
            if (isSelected) {
                this.label.setBackground( table.getSelectionBackground());
            } else {
                this.label.setBackground(Color.yellow);
            return this.label;
    }You may find that using HTML as the text of JLabel is much too expensive, especially with a large table. I tried it once, with a table of only moderate size, and gave up. It's much faster to set the font, foreground color, etc., on the JLabel itself instead.
    I was trying to use HTML simply to get HTML Character Entities (like &amp;) to display correctly, and it just didn't work. I wrote my own class to parse strings for HTML Character Entities, replacing them with appropriate Unicode characters, and it worked much better.
    ---Mark

  • Jtable and new appserver

    we developed an application in beta version of jdeveloper.The things are fine excedpt the jtable component
    It only display 36 rows though query returns more than that. Remaining rows are blank.
    Now i ported this application in app server release2.0 problem is my row problem is solved but server gives out of memory error. Here is the configuration of server
    IBM server on linux with 40 GB hard disk 2GB RAM running oracle 8.1 and app server
    Pl help what could be the problem.
    Is there any way by which i can solve the row problem of jtable on older server
    thanks

    This issue was reported as a bug in the earlier release of JDeveloper, I believe it is fixed in the 903 preview release
    which is on OTN.
    Regards
    Grant Ronald
    Product Management

  • 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);
    }

Maybe you are looking for