Just FYI,

For those of you who don't want to fork out $500 for a profiler or don't want to waste time trying to make trial versions work when they don't work "out of the box", but would like to get snapshots of objects in memory showing class type, and quantity logged periodically to a log file, DrMem (up to java 1.5 compatible) might be worth a look. http://sourceforge.net/projects/simpleprofiler/. Just download, expand and cd into the Mac OS X dir and type "make". Then copy the lib to java extensions and add launch arguments to your Eclpse launch profile sth like this:

-Xrundrmem:file=/tmp/mywoa_drmem.log,maxObjects=100000,maxTime=30

I tried some other free tools, such as jmap (built-in) and jmp, but did not have any success.

DrMem is a simple agent that does a very simple thing and does it reliably and simply. It logs a snapshot of memory every X objects created. So you can set that to 100000 objects or a million objects. the default is 10 milion. It might be useful also for a deployment scenario where you have a slow memory leak. In development, if you set it to a low number, like 10,000, it is logging so much that it slows your app down.

An example of the head of a memory snapshot is sth like this:

Object allocation report from Tue Nov 24 09:29:28 2009

  Number of objects: Currently 5290516, total 11700000

  Class list follows:
       Currently        Total         Size Class name
         1118670      2338521     27184080 java.lang.String
         1099143      2544624     57082952 java.lang.Object
          227644       380377     31011472 com.mysql.jdbc.Field
217613 363530 9268712 com.webobjects.jdbcadaptor.JDBCColumn
          207533       346759      4980792 com.mysql.jdbc.Buffer
          207522       395973      3320352 java.lang.StringBuffer
          195982       335331      3148800 java.lang.Integer
144082 277954 3457968 com.webobjects.foundation.NSArray 139885 255724 5595400 com.webobjects.foundation.NSMutableArray 129388 207580 9315936 com.webobjects.eocontrol._EOMutableKnownKeyDictionary
          123750       234451      2970088 java.lang.ref.WeakReference
79519 170383 4453064 com.webobjects.foundation.NSMutableDictionary 71734 72600 2869360 com.webobjects.foundation.NSTimestamp 63052 75908 2017664 com.webobjects.eoaccess.EOAccessGenericFaultHandler$_EOHandlerWeakRef 60841 102328 973456 java.util.regex.Pattern $Slice 60421 112258 966736 java.util.regex.Pattern $Dollar 60375 101567 966000 java.util.regex.Pattern $Begin
           53924       106458      3019744 java.util.regex.Matcher
51772 51890 2485056 com.webobjects.eocontrol._EOCheapCopyMutableArray 50346 84241 805536 java.util.regex.Pattern $Branch 48027 51862 2305296 com.webobjects.eoaccess.EOAccessArrayFaultHandler 42591 51612 1362912 com.webobjects.eocontrol._EOIntegralKeyGlobalID 40967 62951 1638680 com.webobjects.foundation.NSMutableSet 40262 67612 966288 com.webobjects.foundation._NSWeakMutableCollection $_NSWeakMutableCollectionReferenceEnumerator 35508 35508 1420320 com.webobjects.eocontrol._EOWeakReference
           30467        55375       731208 java.util.ArrayList
           29864        60907       955648 java.sql.Timestamp
           27818        27880      1479704 java.util.WeakHashMap$Entry
27469 27469 1098760 com.webobjects.eoaccess.EODatabase$_DatabaseRecord
           23386       265470       658056 java.lang.Class
           23067        71772       369072 java.lang.Boolean
22496 39471 719872 com.webobjects.foundation._NSCollectionEnumerator 20206 35317 484944 com.webobjects.foundation.NSNotification
           20117        33609      3057784 com.mysql.jdbc.ResultSet
19158 33717 459792 com.webobjects.eocontrol.EOKeyValueQualifier 16800 30915 403200 com.webobjects.foundation._NSJavaArrayEnumerator
           16728        49148       487840 java.util.HashMap$Entry
16474 35426 527168 com.webobjects.eoaccess.EODatabaseChannel$_EODatabaseChannelFetchResult 15025 24046 601000 com.webobjects.eoaccess.EOAccessFaultHandler 12396 20520 595008 com.webobjects.eocontrol.EOFetchSpecification 11350 18716 707320 java.lang.reflect.Constructor 10604 10650 254496 er.extensions.appserver.ERXApplication$JarChecker$Entry
           10600        30458       678400 java.util.regex.Pattern
           10208       143492       874648 java.lang.reflect.Method
10170 30908 565040 java.util.regex.Pattern $GroupHead 10115 29071 161840 java.util.regex.Pattern $Start
           10066        17324       241584 java.util.AbstractList$Itr
10060 16797 241440 com.mysql.jdbc.DatabaseMetaData 10059 16798 724248 com.webobjects.jdbcadaptor.MySQLPlugIn$MySQLExpression 10059 16797 160944 com.webobjects.jdbcadaptor.JDBCFetchPrivate 10059 16794 2092272 com.mysql.jdbc.PreparedStatement 10059 16794 402360 com.mysql.jdbc.PreparedStatement$ParseInfo 10058 29080 241392 java.util.regex.Pattern $TreeInfo
           10058        16804       241392 com.mysql.jdbc.RowDataStatic
10058 16797 190616 com.webobjects.eocontrol.EOEnterpriseObject 10058 16797 160928 com.mysql.jdbc.ResultSetMetaData
           10058        16794       179248 java.io.InputStream
            9105         9125       946920 wk.cheetah.eof.CTLocation
            8480        18911       135680 java.lang.Double
7820 13230 125120 com.webobjects.eocontrol.EOOrQualifier
            7604       215135       121664 java.lang.StringBuilder
7360 7360 176640 com.webobjects.eoaccess.EODatabase$_ToManyRecord
            7300         7706       233624 java.math.BigDecimal
            7199         7214       806288 wk.cheetah.eof.CTCustomer
            5088        31155       169736 java.util.Hashtable$Entry
4690 4709 637840 wk.cheetah.eof.CTMediaTemplate 4428 567855 123280 com.webobjects.foundation.NSKeyValueCoding$_KeyBinding
            4207         4699       305912 java.lang.reflect.Field
            3764         3765       451680 wk.cheetah.eof.CTUser
            3615         3615       375960 wk.cheetah.eof.CTAccount
            3578        11151        85872 java.sql.Date
3425 3425 82200 wk.eofextensions.EncodedString
            2783         2783       311696 wk.cheetah.eof.CTAddress


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to