小编Dmi*_*kiy的帖子

java 9中javax.activation包的替代是什么?

似乎javax.activation在Java 9中不推荐使用package .Oracle迁移指南建议--add-modules java.activation在JVM启动期间使用选项.

但是,我想避免这种情况并替换javax.activationpackage的类,因为它已被弃用,并将在以后的java版本中删除.我想,应该有某种替代方案javax.activation.如果有可用的话,它是什么?

java jvm javax.activation java-9

51
推荐指数
3
解决办法
3万
查看次数

如何在没有JVM参数的情况下隐藏java 9中的"非法反射访问"警告?

我只是尝试用Java 9运行我的服务器并得到下一个警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/azureuser/server-0.28.0-SNAPSHOT.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)

我想隐藏此警告而不--illegal-access=deny在启动期间添加JVM选项.就像是:

System.setProperty("illegal-access", "deny");
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

建议使用JVM选项的所有相关答案,我想从代码中关闭它.那可能吗?

澄清 - 我的问题是关于从代码中转发此警告而不是通过类似问题中所述的JVM参数/标志.

java jvm netty java-9

50
推荐指数
6
解决办法
5万
查看次数

在没有实际负载增加的情况下,Java 9 G1工作约6小时后为什么会出现性能下降?

我将1个实例(2个vCPU,2GB RAM,加载〜4k req/sec)切换到Java 9(来自最新的Java 8).有一段时间,一切都很好,CPU使用率和以前一样.然而,在大约6小时后,CPU消耗无缘无故地增加了4%(从21%增加到25%).我没有流量峰值,没有内存消耗增加,没有度量标准更改(我在代码中的每个方法都有计数器).没有.

我离开这个实例大约12个小时,期待它会恢复原状.但没有改变.它开始消耗更多的CPU.

top命令显示实例的CPU峰值比Java服务器进程通常多.我最近读到G1不适合高吞吐量.所以我得出结论,理由可能在G1.

我重新启动了实例:

java -XX:+UseParallelGC -jar server-0.28.0.jar
Run Code Online (Sandbox Code Playgroud)

经过约20小时的监测,一切都和以前一样好.与前几天相比,CPU消耗量达到了21%的水平.

Java 9部署后的CPU使用率(6小时):

在此输入图像描述

7小时后CPU增加+ 12小时"未触及"(7d比例):

在此输入图像描述

CPU后 - XX:+UseParallelGC(24h刻度):

在此输入图像描述

所以我的问题是 - 是G1的预期行为吗?其他人看到类似的东西?

Ubuntu 16.04 x64

java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
Run Code Online (Sandbox Code Playgroud)

编辑03.01.2019

试图在java 10.0.2上使用G1运行一个相同的服务器:

java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
Run Code Online (Sandbox Code Playgroud)

UseParallelGC服务器重启后,G1消耗的CPU比刚刚多40%.

java performance garbage-collection g1gc java-9

48
推荐指数
1
解决办法
1628
查看次数

如何在Ubuntu下安装JDK 11?

所以Java 11 已经出局了.有人知道如何从命令行安装它(来自Oracle的OpenJDK)吗?

我希望看到之前的Oracle Java 10:

sudo add-apt-repository ppa:linuxuprising/java
sudo apt-get update
sudo apt-get install oracle-java10-installer
Run Code Online (Sandbox Code Playgroud)

PS在提出类似问题的指导中:

sudo apt-get install openjdk-11-jdk
Run Code Online (Sandbox Code Playgroud)

不起作用.

java ubuntu java-11

48
推荐指数
7
解决办法
4万
查看次数

为什么StringBuilder链接模式sb.append(x).append(y)比常规sb.append(x)更快; sb.append(Y)?

我有一个微基准测试,显示非常奇怪的结果:

@BenchmarkMode(Mode.Throughput)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS, batchSize = 1000)
@Measurement(iterations = 40, time = 1, timeUnit = TimeUnit.SECONDS, batchSize = 1000)
public class Chaining {

    private String a1 = "111111111111111111111111";
    private String a2 = "222222222222222222222222";
    private String a3 = "333333333333333333333333";

    @Benchmark
    public String typicalChaining() {
        return new StringBuilder().append(a1).append(a2).append(a3).toString();
    }

    @Benchmark
    public String noChaining() {
        StringBuilder sb = new StringBuilder();
        sb.append(a1);
        sb.append(a2);
        sb.append(a3);
        return sb.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待两个测试的结果相同或至少非常接近.但是,差异几乎是5倍:

# Run complete. Total time: 00:01:41 …
Run Code Online (Sandbox Code Playgroud)

java performance microbenchmark jmh

44
推荐指数
1
解决办法
1850
查看次数

在使用Java 11进行调试期间,如何避免出现“仅由于引导加载程序类附加了引导加载程序类才支持共享”的警告?

最近,我切换到Java 11并开始调试应用程序,并看到以下消息:

OpenJDK 64位服务器VM警告:引导加载程序类仅支持共享,因为已附加了引导程序类路径

仅找到此提交故障单,但并不能告诉我太多。

我需要担心吗?

java intellij-idea classloader java-11

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

无法在Java 9中为自动生成的模块名称派生模块描述符?

我的项目依赖于Netty Epoll传输.这是依赖:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
    <classifier>${epoll.os}</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)

此依赖项的自动生成的模块名称为:

netty.transport.native.epoll
Run Code Online (Sandbox Code Playgroud)

由于native关键字是在Java 9中保留的,我无法将此模块作为依赖项添加到我的项目中:

module core {
    requires netty.transport.native.epoll;
}
Run Code Online (Sandbox Code Playgroud)

由于:

module not found: netty.transport.<error>
Run Code Online (Sandbox Code Playgroud)

此外,jar工具--describe-module报告以下内容:

无法导出模块描述符:网状输送本地-epoll的-4.1.17.Final-快照Linux的x86_64.jar netty.transport.native.epoll:无效的模块名称:"天然"是不是Java标识符

有没有解决方法?(当然,除了"发布正确的网络工件").

编辑:

作为维护者的快速修复 - 您可以添加下一行来构建:

<manifestEntries>
   <Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
</manifestEntries>
Run Code Online (Sandbox Code Playgroud)

java netty java-9 java-module module-info

19
推荐指数
1
解决办法
6923
查看次数

log4j2与Java 11兼容吗?

我尝试在最新的Java 11上运行我的项目.一切正常,除了特定的文件记录器.日志在以前的Java版本(10,9,8)上运行良好,但在Java 11上则不行.

在服务器运行期间,我只看到1个警告:

警告:不支持sun.reflect.Reflection.getCallerClass.这会影响性能.

这是我的配置:

<Configuration>

    <Appenders>

        <RollingFile name="postgresDBLog" fileName="${sys:logs.folder}/postgres.log"
              filePattern="${sys:logs.folder}/archive/postgres.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="workersLog" fileName="${sys:logs.folder}/worker.log"
                     filePattern="${sys:logs.folder}/archive/worker.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="statsLog" fileName="${sys:logs.folder}/stats.log"
                     filePattern="${sys:logs.folder}/archive/stats.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="userLog" fileName="${sys:logs.folder}/blynk.log"
                     filePattern="${sys:logs.folder}/archive/blynk.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%d{HH:mm:ss.SSS} %-5level- %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

    </Appenders>

    <Loggers>

        <Logger name="cc.blynk.server.workers" level="debug" additivity="false">
            <appender-ref ref="workersLog"/>
        </Logger>
        <Logger name="cc.blynk.server.workers.StatsWorker" level="debug" additivity="false">
            <appender-ref ref="statsLog"/>
        </Logger>
        <Logger name="cc.blynk.server.db" level="debug" additivity="false">
            <appender-ref ref="postgresDBLog"/> …
Run Code Online (Sandbox Code Playgroud)

java log4j2 java-11

19
推荐指数
5
解决办法
6265
查看次数

为什么String连接比String.valueOf更快,以便将Integer转换为String?

我有一个基准:

@BenchmarkMode(Mode.Throughput)
@Fork(1)
@State(Scope.Thread)
@Warmup(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS, batchSize = 1000)
@Measurement(iterations = 40, time = 1, timeUnit = TimeUnit.SECONDS, batchSize = 1000)
public class StringConcatTest {

    private int aInt;

    @Setup
    public void prepare() {
        aInt = 100;
    }

    @Benchmark
    public String emptyStringInt() {
        return "" + aInt;
    }

    @Benchmark
    public String valueOfInt() {
        return String.valueOf(aInt);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是结果:

Benchmark                                          Mode  Cnt      Score      Error  Units
StringConcatTest.emptyStringInt                   thrpt   40  66045.741 ± 1306.280  ops/s
StringConcatTest.valueOfInt                       thrpt   40 …
Run Code Online (Sandbox Code Playgroud)

java performance microbenchmark

18
推荐指数
1
解决办法
854
查看次数

如何从checkstyle插件检查中排除module-info.java?

module-info.java文件添加到我的项目后,我的checkstyle插件开始失败:

[错误]无法执行目标org.apache.maven.plugins:maven-checkstyle-plugin:2.17:检查(default-cli)项目电子邮件:在checkstyle配置期间失败:在分析文件/ home/xxx /期间发生NoViableAltException IdeaProjects/blynk服务器/服务器/通知/电子邮件/ src目录/主/ JAVA/module-info.java.意外令牌:模块 - > [帮助1]

我试过了

<module name="BeforeExecutionExclusionFileFilter">
    <property name="fileNamePattern" value="module\-info\.java$"/>
</module>
Run Code Online (Sandbox Code Playgroud)

然而,它失败了:

[错误]无法执行目标org.apache.maven.plugins:maven-checkstyle-plugin:2.17:check(default-cli)on project blynk:checkstyle配置失败:无法初始化模块BeforeExecutionExclusionFileFilter - 无法实例化'BeforeExecutionExclusionFileFilter'类,也无法将其实例化为com.puppycrawl.tools.checkstyle.checks.annotation.BeforeExecutionExclusionFileFilter

module-info.java在checkstyle期间为maven-checkstyle-plugin 跳过文件的正确方法是什么?

java maven-plugin maven java-9 maven-checkstyle-plugin

14
推荐指数
2
解决办法
1822
查看次数