小编Rip*_*ips的帖子

异步日志记录

现在在我的应用程序中,在某些时候我们将一些重要的东西记录到日志文件中.

基本上只针对日志记录,我们正在创建可用数据的JSON,然后登录到日志文件.这是以JSON格式记录数据的业务要求.

现在从可用数据创建JSON然后记录到FILE会花费大量时间并影响原始请求返回时间.现在的想法是改善引用.

我们讨论的一件事是使用创建线程池

Executors.newSingleThreadExecutor() 
Run Code Online (Sandbox Code Playgroud)

在我们的代码中,然后将任务提交给它,将数据转换为JSON和后续日志记录.

这是一个很好的方法吗?由于我们正在管理线程池本身,是否会产生一些问题?

如果有人可以分享更好的解决方案,我将不胜 在某种程度上使用Log4j.我试图使用AsyncAppender但没有达到任何预期的结果.我们使用的是EJB 3,Jboss 5.0,Log4j,java6.

java performance asynchronous log4j jboss5.x

12
推荐指数
2
解决办法
1万
查看次数

加载类总数不断增加

我们正在对我们的一个遗留应用程序进行性能测试,当时我们发现没有类加载持续增加,从而导致非堆内存的增加。

现在我正在寻找根本原因,我能想到的一件事是,在几个地方我们使用 Class.forName ,如下所示:

Test a = (Test) Class.forName(className, false, Test.class.getClassLoader()).newInstance();
Run Code Online (Sandbox Code Playgroud)

这能是一个理由吗?如果上述代码语句中的类名相同,则调用 class.forName 是否会一次又一次加载相同的类。

应用服务器:Jboss 6.1 EAP

JDK:1.6.27

java performance jvm performance-testing jboss7.x

5
推荐指数
1
解决办法
1949
查看次数

在字符串比较中使用 == 而不是 equals 不会被 Sonar 捕获

我有以下代码:

String s1 = "a";
    String s2 = "a";
    if (s1 == s2) {
        System.out.println("string not equal");
    }
Run Code Online (Sandbox Code Playgroud)

当我使用 SonarLint 分析这段代码时,它没有被捕获。我希望这应该被以下规则所捕获

鱿鱼:S1698-“==”和“!=”当“等于”被覆盖时不应使用

我已经使用 Sonar Qube 7.0 在独立模式和连接模式下检查了这一点。有人知道为什么声纳会这样吗?

- - - - - - - -编辑 - - - - - - - - -

同样的情况也发生在:

Integer x= 500;
Integer y= 500;
if (x==y){
            System.out.println("not equal");
        }
Run Code Online (Sandbox Code Playgroud)

java sonarqube sonarlint sonarlint-intellij

5
推荐指数
0
解决办法
915
查看次数

防止继承静态块

如果我们运行派生类,它将打印派生和parent..is有什么方法可以防止静态块的继承?

// 1级

public class parent {
static {
      System.out.println("Parent");
}
}
Run Code Online (Sandbox Code Playgroud)

//类2

public class derived extends parent{
      static {
            System.out.println("derived");
      }

      public static void main(String [] args) {

      }
}
Run Code Online (Sandbox Code Playgroud)

基本上我在父类中有一些我想要继承的方法,但是不希望在实例化派生类时发生在父静态块中发生的处理..有什么方法可以做到这一点,或者我将不得不复制代码?

java inheritance java-6

2
推荐指数
1
解决办法
1133
查看次数