JVM的Log

JVM在调试版本下,会输出hotspot.log。通过参数-Xloggc:FileName,来设置GC的log。
 
Log的实现主要在
  \hotspot\src\share\vm\utilities\ostream.hpp
  \hotspot\src\share\vm\utilities\ostream.cpp
  \hotspot\src\share\vm\utilities\xmlstream.hpp
  \hotspot\src\share\vm\utilities\xmlstream.cpp
  \hotspot\src\share\vm\utilities\defaultStream.hpp
 
主要的class是:outputStream、fileStream、xmlTextStream、defaultStream
 
继承关系是:
ResourceObj
  |
  |-- outputStream
       |
       |--- fileStream
       |
       |--- xmlTextStream
             |
             |--- defaultStream
 
defaultStream::instance 是其他模块调用的主要接口。
 
Log的初始化
ostream_init()初始化defaultStream::instance
ostream_init_log()初始化JVM的Debug log 和 GC的log,
其中其核心代码是:defaultStream::instance->has_log_file();它转而调用void defaultStream::init_log();这是真正干活的代码了。
defaultStream::init_log的代码写的很清晰,其中只有一个C++的语法点需要注意:重载new operator。
ostream.cpp line 346 
  fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name);
这是因为outputStream的父类是ResourceObj,ResourceObj重载了new 和 delete operator。关于C++语法就不多说了,太多的好书论及了这个问题。
 
Log的最终释放
Threads::destroy_vm()
   |
   |--> exit_globals()
         |
         |--> ostream_exit()
              |
              |--> 用delete operator释放掉各个log
 
总结
   Log各个class的实现除了很自然地运用了继承,同时运用重载new/delete operator这个C++特有的技巧,也
   有效地封装了log的创建和释放功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值