`
李静波
  • 浏览: 53810 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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的创建和释放功能。
分享到:
评论

相关推荐

    JVM Crash,生成hs_err_pid.log文件

    当JVM出现严重错误或者遇到无法处理的异常时,它可能会突然崩溃,并生成一个名为`hs_err_pid.log`的错误报告文件。这个文件对于开发者来说至关重要,因为它记录了JVM崩溃时的详细信息,包括堆栈跟踪、系统属性、线程...

    jvm crash的崩溃日志详细分析及注意点

    然而,当JVM出现严重错误或无法恢复的问题时,它可能会崩溃并生成一个崩溃日志,这通常被称为`hs_err_pid.log`文件。这篇内容将深入探讨如何分析这些崩溃日志以及需要注意的关键点。 首先,我们可以通过设置JVM启动...

    jvm 老年代oom gc.log

    一次jvm 老年代oom 的dump文件样例

    jvm内存状况查看

    如果希望将日志输出到文件,可以添加`-Xloggc:gc.log`参数,其中`gc.log`是自定义的日志文件名。 GC日志包含的信息可以帮助我们理解内存回收的模式。例如,日志中的 `[PSYoungGen: 612300K->61235K(637952K)]` 表示...

    JVM性能调优总结.docx

    * -Xloggc:log/gc.log:设置垃圾回收日志文件。 * -XX:+PrintClassHistogram:设置类histogram日志。 * -XX:+PrintGCDetails:设置垃圾回收详细日志。 * -XX:+PrintGCTimeStamps:设置垃圾回收时间戳日志。 * -XX:+...

    一个jvm启动多个springboot服务

    例如,`java -jar myapp.jar --server.port=8080 --logging.file.path=log`。 4. **配置文件隔离**:可以为每个服务创建单独的配置文件,如`application-serviceA.properties`和`application-serviceB.properties`...

    jvm 配置jvm参数

    5. **监控和调试**:启用详细的垃圾回收日志 (`-XX:+PrintGCDetails`, `-XX:+PrintGCTimeStamps`, `-XX:+PrintHeapAtGC`),并指定日志文件位置 (`-Xloggc:log/gc.log`),以便于后续的性能分析和调优。 #### 四、...

    JVM crash 错误日志分析

    当JVM出现崩溃时,系统会产生一个名为“hs_err_pid.log”的错误日志文件,这个文件包含了关于崩溃时的详细信息。通过对这个日志的深入分析,我们可以找出问题的原因并采取相应的解决措施。 首先,我们需要了解JVM...

    JVM崩溃

    标题中的“JVM崩溃”指的是Java虚拟机(Java Virtual Machine)在运行过程中遇到了无法处理的错误,导致程序异常终止的现象。这通常是由于内存溢出、类装载错误、线程死锁或其他严重问题引起的。理解JVM崩溃的原因和...

    jvm常用命令工具

    为了快速定位并解决问题,我们需要收集多种类型的运行时信息,包括但不限于系统日志、堆转储文件(heap dump)、线程转储文件(thread dump)以及垃圾收集日志(GC log)等。Java虚拟机(JVM)提供了一系列内置的...

    jvm调试示例代码

    - 使用`System.out.println`或日志框架(如Log4j、Logback)记录运行信息,辅助调试。 - `-XX:+TraceClassLoading`和`-XX:+PrintCompilation`等参数可追踪类加载和编译过程。 4. **JConsole与VisualVM** - ...

    JVM优化方案

    Java虚拟机(JVM)是Java程序运行的基础,它提供了执行字节码的环境。不同公司根据JVM规范实现了自己的JRE(Java运行环境),如Oracle的Hotspot JDK、IBM的JDK、阿里巴巴的淘宝JDK等。Oracle通过收购Sun和BEA,将...

    常用JVM配置参数.ppt

    ### 常用JVM配置参数详解 #### 一、概述 Java虚拟机(JVM)是运行Java程序的核心环境,其性能的优劣直接影响到Java应用程序的执行效率。为了更好地控制JVM的行为并进行调优,熟悉JVM的配置参数至关重要。本文将深入...

    解决JVM中得PermGen spac问题

    3. 使用了 log4j,导致 PermGen space 错误。 解决 Java heap space 问题: Java heap space 的设置是指 JVM 可以调配使用的内存空间的设置。JVM 在启动的时候会自动设置 Heap size 的值,其初始空间(即-Xms)是...

    JVM总结.docx

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(Garbage Collector, GC)。GC的主要任务是自动管理程序中的内存,回收不再使用的对象,避免内存泄漏,确保系统的稳定运行。HotSpot ...

    Apache Log4j2紧急缓解措施.docx

    在启动 Java 应用程序时,添加一个 JVM 参数 -Dlog4j2.formatMsgNoLookups=true,这将禁用 Log4j2 的消息查找功能,以避免攻击者通过 Log4j2 的漏洞来执行恶意代码。例如,原来的启动命令是: ``` java -jar xxx.jar...

    ManageEngine EventLog Analyzer 12.2.1

    ManageEngine Eventlog Analyzer是用来分析和审计系统及事件日志的管理软件,能够对全网范围内的主机、服务器、网络设备、数据库以及各种应用服务系统等产生的日志,进行全面收集和细致分析,通过统一的控制台进行...

Global site tag (gtag.js) - Google Analytics