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出现严重错误或者遇到无法处理的异常时,它可能会突然崩溃,并生成一个名为`hs_err_pid.log`的错误报告文件。这个文件对于开发者来说至关重要,因为它记录了JVM崩溃时的详细信息,包括堆栈跟踪、系统属性、线程...
然而,当JVM出现严重错误或无法恢复的问题时,它可能会崩溃并生成一个崩溃日志,这通常被称为`hs_err_pid.log`文件。这篇内容将深入探讨如何分析这些崩溃日志以及需要注意的关键点。 首先,我们可以通过设置JVM启动...
一次jvm 老年代oom 的dump文件样例
如果希望将日志输出到文件,可以添加`-Xloggc:gc.log`参数,其中`gc.log`是自定义的日志文件名。 GC日志包含的信息可以帮助我们理解内存回收的模式。例如,日志中的 `[PSYoungGen: 612300K->61235K(637952K)]` 表示...
* -Xloggc:log/gc.log:设置垃圾回收日志文件。 * -XX:+PrintClassHistogram:设置类histogram日志。 * -XX:+PrintGCDetails:设置垃圾回收详细日志。 * -XX:+PrintGCTimeStamps:设置垃圾回收时间戳日志。 * -XX:+...
例如,`java -jar myapp.jar --server.port=8080 --logging.file.path=log`。 4. **配置文件隔离**:可以为每个服务创建单独的配置文件,如`application-serviceA.properties`和`application-serviceB.properties`...
5. **监控和调试**:启用详细的垃圾回收日志 (`-XX:+PrintGCDetails`, `-XX:+PrintGCTimeStamps`, `-XX:+PrintHeapAtGC`),并指定日志文件位置 (`-Xloggc:log/gc.log`),以便于后续的性能分析和调优。 #### 四、...
当JVM出现崩溃时,系统会产生一个名为“hs_err_pid.log”的错误日志文件,这个文件包含了关于崩溃时的详细信息。通过对这个日志的深入分析,我们可以找出问题的原因并采取相应的解决措施。 首先,我们需要了解JVM...
标题中的“JVM崩溃”指的是Java虚拟机(Java Virtual Machine)在运行过程中遇到了无法处理的错误,导致程序异常终止的现象。这通常是由于内存溢出、类装载错误、线程死锁或其他严重问题引起的。理解JVM崩溃的原因和...
为了快速定位并解决问题,我们需要收集多种类型的运行时信息,包括但不限于系统日志、堆转储文件(heap dump)、线程转储文件(thread dump)以及垃圾收集日志(GC log)等。Java虚拟机(JVM)提供了一系列内置的...
- 使用`System.out.println`或日志框架(如Log4j、Logback)记录运行信息,辅助调试。 - `-XX:+TraceClassLoading`和`-XX:+PrintCompilation`等参数可追踪类加载和编译过程。 4. **JConsole与VisualVM** - ...
Java虚拟机(JVM)是Java程序运行的基础,它提供了执行字节码的环境。不同公司根据JVM规范实现了自己的JRE(Java运行环境),如Oracle的Hotspot JDK、IBM的JDK、阿里巴巴的淘宝JDK等。Oracle通过收购Sun和BEA,将...
### 常用JVM配置参数详解 #### 一、概述 Java虚拟机(JVM)是运行Java程序的核心环境,其性能的优劣直接影响到Java应用程序的执行效率。为了更好地控制JVM的行为并进行调优,熟悉JVM的配置参数至关重要。本文将深入...
3. 使用了 log4j,导致 PermGen space 错误。 解决 Java heap space 问题: Java heap space 的设置是指 JVM 可以调配使用的内存空间的设置。JVM 在启动的时候会自动设置 Heap size 的值,其初始空间(即-Xms)是...
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(Garbage Collector, GC)。GC的主要任务是自动管理程序中的内存,回收不再使用的对象,避免内存泄漏,确保系统的稳定运行。HotSpot ...
在启动 Java 应用程序时,添加一个 JVM 参数 -Dlog4j2.formatMsgNoLookups=true,这将禁用 Log4j2 的消息查找功能,以避免攻击者通过 Log4j2 的漏洞来执行恶意代码。例如,原来的启动命令是: ``` java -jar xxx.jar...
这时,可以考虑修改JVM启动参数,添加`-Dfile.encoding=UTF-8`等类似的命令来设置全局的文件编码。 - **检查操作系统设置**:如果在Linux环境下运行应用,还需要确保服务器的locale设置正确。可以通过命令`locale`...