HTML5技术

在内存中观察CLR托管内存及GC行为 - lulianqi15(4)

字号+ 作者:H5之家 来源:H5之家 2017-02-27 18:00 我要评论( )

NextObjPrt现在也正常的指向了bytes的后面 监测点8 数据确实在里面被改动了,而且bytesStart bytesThen也的确处于G1 监测点9 这次回收除了a1 其他的bytesStart bytesThenbytes ,应该都会被回收 之前放着bytesStart

 

NextObjPrt现在也正常的指向了bytes的后面

 

监测点8

 

 

 

 

数据确实在里面被改动了,而且bytesStart  bytesThen也的确处于G1

监测点9

 这次回收除了a1 其他的bytesStart  bytesThen bytes ,应该都会被回收

 

 

之前放着bytesStart  bytesThen bytes 指针的内存 数据已经被覆盖了,现在他们都被移动到另外一块内存

而a1 现在应该由g1提升到了g2

 

 

之前存放a1指针的地址也全部被覆盖了,在内存里搜索到4块新内存,其中一块还与前面的bytesStart  bytesThen 新指针放在一起

 

 

虽然现在NextObjPrt 现在不为0 ,但也明显被重置了 (因为打印的缘故,GC后马上创建了新的对象)

也很明显,并没有覆盖前面的内存,而是直接指向了后面的内存

 

 

现在来看刚刚被认为是标记GC后下一次分配内存的地址的的内存块,现在的地址02488A88,这个地址也十分合理,正好在两次NextObjPrt 的中间

标识这个地址的确是标记GC后 新NextObjPrt的初始值

 

监测结束

跳出RunTest,马上就执行了一次完全的GC

 

上面写的比较杂乱,虽然很对东西还是没有弄明白也没有发现什么规律,不过至少可以得到下面的一些结果

1:证明了NextObjPrt 的存在,也了解他的基本行为(其结构后面数据可能还包含G0阈值等其他数据)

2:GC回收使用的标记方法的确是根搜索

3:被回收的内存不会被擦除,只是通过移动NextObjPrt标记下一个内存能被分配的位置

4:对象从G0移动到G1,内存本身不会移动(可能记录对象的指针的表会有相应更新)

5:不是每次回收都会压缩内存,大部分时间都维持原有结构

6:对象在内存中的存储细节

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 一个由进程内存布局异常引起的问题 - twoon

    一个由进程内存布局异常引起的问题 - twoon

    2017-02-08 17:00

  • SQL Server 2014内存优化表的使用场景 - 桦仔

    SQL Server 2014内存优化表的使用场景 - 桦仔

    2017-01-25 14:02

  • 微信小程序开闸,关于入口、推广、场景的一些观察与思考 - 腾讯攻城师lee

    微信小程序开闸,关于入口、推广、场景的一些观察与思考 - 腾讯攻城

    2017-01-10 13:00

  • In-Memory:内存数据库 - 悦光阴

    In-Memory:内存数据库 - 悦光阴

    2017-01-08 11:00

网友点评
b