RFR (XS): 8014405: G1: PerRegionTable::fl_mem_size() calculates size of the free list using wrong element sizes

Thomas Schatzl thomas.schatzl at oracle.com
Thu May 16 20:12:17 UTC 2013


Hi,

  there is a new webrev at
http://cr.openjdk.java.net/~tschatzl/8014405/webrev.1/

Thanks for your previous review btw.

The changes are:
- renamed PerRegionTable::test() to PerRegionTable::test_fl_mem_size()
- moved the test method implementation to the bottom of the file.
- fixed the "memory leak" when not using g1 I was talking about by
simply checking whether G1 is enabled or not. If it is not, just return.

I left the test case as is for now, awaiting your comments.

Testing:
jprt

Hth,
  Thomas

On Thu, 2013-05-16 at 17:00 +0200, Thomas Schatzl wrote:
> Hi,
> 
> On Thu, 2013-05-16 at 16:19 +0200, Bengt Rutisson wrote:
> > Hi Thomas,
> > 
> > The code change looks good.
> > 
> > I'm a little concerned about the test. Isn't there a risk that the VM 
> > will crash if it keeps running after the tests are complete since you 
> > have added the dummy PerRegionTable to the free list?
> 
> No. If you use a different GC than G1 it does not matter, you have the
> "memory" leak I was talking about.
> 
> If it is G1, the next time a PerRegionTable is allocated, it will be
> reinitialized with a correct HeapRegion pointer anyway.
> 
> > It also seems a bit risky to use NULL for the heap region to pass to 
> > alloc(). It works since no one checks for NULL or tries to use it, but 
> > it feels a bit unstable.
> 
> I do not think there is a risk as the allocating thread is responsible
> for using/not using any method of the PerRegionTable that uses the
> HeapRegion reference. As soon as the PerRegionTable is allocated
> (owned), no other owner can access it.
> 
> I had the impression that these unit tests run before control is passed
> to the java program. So at this point there can be no one trying to mess
> around with the free list.
> 
> You are right that it relies on knowledge of the internals of the
> alloc() method and the constructor of the PerRegionTable, but I do not
> see a way to avoid it. We are somewhat tied to the class by the single
> static free list pointer.
> 
> Except maybe extracting the free list management into a class,
> instantiate a test private instance of it, add setup/teardown methods
> for both the free list management and the PerRegionTable instance (the
> problem is, this leads to changes up to the BitMap class...).
> 
> At some point we may even want to do that because maybe there is too
> much contention in free list management. It seems a lot of effort for
> too little gain. I can do that if you want.
> 
> Maybe you have a better idea?
> 
> > I think the test() method could have a more descriptive name. Maybe 
> > test_fl_mem_size()? Finally, I think most other modules that use the 
> 
> Okay, will do.
> 
> > ExecuteInternalVMTests "framework" add the test methods to a section at 
> > the bottom of the file. Do you think it is worth following this 
> > convention and moving your test method to the end of the file?
> 
> You mean PerRegionTable::test_fl_mem_size()? I will do that, but I
> thought at the end of the class would be sufficient.
> 
> > Having said this, I am really happy that you added a test for this! 
> > Thanks for doing that!
> 
> Thanks for your input,
> Thomas
> 
> 





More information about the hotspot-gc-dev mailing list