Re: Memory utilization
Peter Booth <[email protected]> Wed, 30 Jan 2008 23:21:17 -0500
| Newsgroups | gmane.comp.windows.devel.java.advanced |
|---|---|
| Message-ID | <[email protected]> |
The 150MB number is wrong. Don't believe Netbeans. Use a profiler you can trust: Yourkit or OptimizeIT . You can see this from first principles. If i=4 million then we have 2x i Integer objects - 8 million Integer objects These wrapper objects take up 16bytes so we have 8 * 16 million bytes = 128 MB of Integer objects On Jan 30, 2008, at 7:47 PM, Avinash Lakshman wrote: > I ran the very same experiment and I am enclosing the image of the > NetBeans profiler having captured the memory utilized. The heap > utilization by the program was around 600MB but the memory used by > the data that I use is around 150MB. So how does it manifest itself > as 4 times the amount of heap memory consumed? > > Thanks > A > >> Date: Wed, 30 Jan 2008 11:40:40 -0500 >> From: [email protected] >> Subject: Re: [ADVANCED-JAVA] Memory utilization >> To: [email protected] >> >> Avinash, >> >> A very crude experiment (say +/- 20%): >> >> I ran your test program on my MacBook Pro after changing the upper >> bound to Integer.MAX_VALUE / 512; >> >> It took 7.5 secs to complete and had a heap size of 572MB just prior >> to exiting. >> >> 7.500: [GC 7.500: [DefNew: 72576K->8064K(72576K), 0.4641337 secs] >> 584898K->572609K(1040512K), 0.4642092 secs] >> >> 1. Changing the code to avoid the unnecessary Integer creation >> reduced >> execution time to 4.34 sec (42%) and heap size to 313 MB (45%) >> >> int COUNT = Integer.MAX_VALUE / 512; >> Map<String, String> map = new HashMap<String, String>(); >> for( int i = 0; i < COUNT; ++i ) >> { >> String s = Integer.toString(i); >> map.put(s,s); >> } >> >> 4.340: [GC 4.341: [DefNew: 72576K->8063K(72576K), 0.5675008 secs] >> 313491K->313491K(1040512K), 0.5675750 secs] >> >> 2. Changing the code to create the HashMap presized, reduced >> execution >> time to 4.3 sec(5%) and increased heap size to 319 MB(2%) >> >> Map<String, String> map = new HashMap<String, String>(COUNT); >> >> 4.089: [GC 4.089: [DefNew: 72576K->8064K(72576K), 0.5929834 secs] >> 318993K->318993K(1040512K), 0.5930458 secs] >> >> There is always more you can do, so long as you know more about your >> data's characteristics than the programmer of the general purpose >> collection code you are using. >> >> Peter >> >>> I was trying to profile the following piece of code using NetBeans: >>> >>> public static void main(String[] args) >>> { >>> Map<String, String> map = new HashMap<String, String>(); >>> for( int i = 0; i < Integer.MAX_VALUE; ++i ) >>> { >>> map.put(Integer.valueOf(i).toString(), >>> Integer.valueOf(i).toString()); >>> } >>> } >>> >>> >>> I set my max and min heap size to be 1GB. I find that the program >>> dies after having created 4M entries (at which point the heap used >>> is at 1GB) although the memory used by the objects as indicated by >>> the Netbeans memory profiler is the following: >>> >>> String -- 48MB >>> char[] -- 48 MB >>> HeapCharBuffer -- 45MB >>> Integer -- 19MB >>> HashMap$Entry -- 19MB >>> >>> >>> This totals to less than 200 MB and the rest of the objects are at >>> 0% of the total used memory. How come the heap usage is at 1GB at >>> this point of time? I am extremely confused. Could someone please >>> explain what might be going on? >>> >>> Thanks >>> A >>> >>> _________________________________________________________________ >>> Need to know the score, the latest news, or you need your Hotmail®- >>> get your 'fix'. >>> http://www.msnmobilefix.com/Default.aspx >>> =================================== >>> This list is hosted by DevelopMentor® http://www.develop.com >>> >>> View archives and manage your subscription(s) at http://discuss.develop.com >> >> >> =================================== >> This list is hosted by DevelopMentor® http://www.develop.com >> >> View archives and manage your subscription(s) at http://discuss.develop.com > > _________________________________________________________________ > Need to know the score, the latest news, or you need your Hotmail®- > get your "fix". > http://www.msnmobilefix.com/Default.aspx > =================================== > This list is hosted by DevelopMentor® http://www.develop.com > > View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentor® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com