如何避免C3P0日志框架生成大量的String对象

时间:2015-12-09 02:36:59

标签: performance c3p0

在使用c3p0进行性能测试期间,我发现com.mchange.v2.resourcepool.BasicResourcePool.trace()正在创建大量的字符串对象。尽管字符串输出被slf4j日志实例抑制(因为日志级别是警告的),但这对对象分配率有很大贡献。我们有任何避免这种情况的配置吗?提前谢谢。

logback.xml

<logger name="com.mchange" level="WARN" additivity="false">
    <appender-ref ref="ROLLING" />
</logger>

的pom.xml

    <logback.version>1.1.3</logback.version>
    <slf4j.version>1.7.12</slf4j.version>


    <!-- Logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
    </dependency>

1 个答案:

答案 0 :(得分:0)

所以BasicResourcePool.trace()properly guarded来测试FINEST的记录器(在分配字符串之前应该映射到TRACE。那么问题就是为什么,在给定配置的情况下,字符串被分配了吗?

答案结果是......我搞砸了。桥接库中对slf4j日志记录的防护方法不正确地报告记录器记录的是它们不存在的级别(在mchange-commons-java所依赖的c3p0库中)。很糟糕。我今晚会尝试发布一个修补程序(并通过评论通知你)。