HTML5技术

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

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

现在想知道这些TypeA的指针,却发现内存里根本没有这个地址(后面9个的结果一样) 甚至连里面的TypeB的指针也搜索不到 其实这些TypeA从一创建即为不可达,因为后面再也没有用到它们的地方,即一开始就没有任何对象

 

现在想知道这些TypeA的指针,却发现内存里根本没有这个地址(后面9个的结果一样)

甚至连里面的TypeB的指针也搜索不到

 

其实这些TypeA从一创建即为不可达,因为后面再也没有用到它们的地方,即一开始就没有任何对象引用过他们,在引用跟踪里一直被作为垃圾

 

 

 

这个时候NextObjPrt 已经指向了02487520

 

监测点5 (出RunCreat)

 

 

 

出RunCreat()这个方法回到RunTest()里,NextObjPrt指向依然没有变化(没有新的对象创建)。

 

监测点6 (回收G0)

 

 

执行完G0回收后 ,NextObjPrt直接变为了全0 (其实后面还有跟的8个字节的数据也变为了0,这8个字节可能为G0阀值)

 

 

 这里有个疏忽,本来先要监测a1的回收,现在发现后面的代码残留上一次的测试代码错误的把a1引用了, 所以要到这一行结束a1是垃圾

 

 

 

经过G0回收后,bytesStart  bytesThen,应该移动到G1,不过看他们在内存里的位置并没有发生任何变化(内存里也只有这一份)

那10个在RunCreat创建的TypeA也似乎没有什么变化

 

关于书上的描述跟图例,似乎在GC完成后,G0向G1的代提升会移动内存,不过现在看来并没有移动内存(目前GC把85000字节的数据当作大对象,所以这里的bytesStart  也不是大对象)

 

 

那如果bytesStart  bytesThen是存活的,不能回收,那下一个NextObjPrt也一定紧接着在bytesThen后面

整个内存符合条件的也就这么一处(即使是搜索?? 6D 48 02 也只有这一块内存符合条件),虽然这块内存看起来没有什么特别的格式

 

监测点7 (下一个地址从什么地方开始分配)

 

 

可以看到bytes这个全a的数据真的是从刚刚推测的地址开始分配内存的,在RunCreat创建的TypeA也直接被覆盖了(确实被当作了垃圾)

 

 

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

网友点评
-