小编Tho*_*sen的帖子

Oracle JDK和OpenJDK之间的差异

注意:此问题来自2014年.从Java 11开始,OpenJDK和Oracle JDK正在融合.

Oracle和OpenJDK之间是否存在重大差异?

例如,垃圾收集和其他JVM参数是否相同?

GC在两者之间的工作方式不同吗?

java difference

651
推荐指数
11
解决办法
49万
查看次数

如何找出Linux中使用交换空间的进程?

在Linux下,如何找出更多使用交换空间的进程?

linux memory swap

232
推荐指数
10
解决办法
31万
查看次数

测试两个JSON对象是否相等,忽略Java中的子顺序

我正在寻找一个JSON解析库,它支持比较忽略子命令的两个JSON对象,特别是用于测试从Web服务返回的JSON的单元测试.

任何主要的JSON库都支持这个吗?org.json库只是进行参考比较.

java junit json

223
推荐指数
10
解决办法
26万
查看次数

从git branch派生maven工件版本

我们有一个工作流程要求,这实际上意味着我们需要从git中的当前分支外部定义模块的工件版本.

即如果我们在git的master分支上,我需要<version>master-...</version>,如果我们在bugfixX分支上,我需要<version>bugfixX-....</version>为这个pom.xml生成工件.

我之前发现https://github.com/koraktor/mavanagaiata可以提供SHA-1哈希作为属性,从文档中可以看出它也可以提供分支,所以也许它可以在早期运行我们可以设置属性并放入<version>${our.version}</version>pom的过程.如果这是可能的,我非常希望看到一个有效的pom.xml(并为它奖励500点赏金).

如果没有,我想我们正在进行预处理或"git checkout"使用一些钩子做一些额外的魔法(我还没有尝试过,工作代码也会很棒).

我们有一个顶级pom,可以在构建模块之前运行以生成".."中的属性文件,其中我要求的这个功能需要去.

关于如何解决这个问题的任何建议?

git maven mavanagaiata

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

Java字节基元类型是否有任何实际用途?

由于一些莫名其妙的原因,byte原始类型是用Java签名的.这意味着有效值为-128..127而不是通常的0..255范围,表示一个字节中的8个有效位(没有符号位).

这意味着所有字节操作代码通常进行整数计算并最终屏蔽掉最后8位.

我想知道是否存在任何真实生活场景,其中Java byte原始类型完全适合,或者它是否只是一个完全无用的设计决策?


编辑:唯一的实际用例是本机代码的单字节占位符.换句话说,不要将其作为Java代码中的字节进行操作.


编辑:我现在已经看到一个内部紧密循环需要除以7(数字0..32)的位置,因此可以使用字节作为数据类型来完成查找表,以便考虑L1缓存使用时内存使用率保持较低.这不是指签名/无签名,而是实际使用的情况.

java byte types

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

在一个会话中记录方法调用,以便在将来的测试会话中重放?

我有一个后端系统,我们使用第三方Java API从我们自己的应用程序访问.我可以像普通用户一样以其他用户的身份访问系统,但我没有虔诚的权力.

因此,为了简化测试,我想运行一个真实的会话并记录API调用,并保留它们(最好是可编辑的代码),这样我们以后可以通过API调用进行干测试运行,只需从记录会话中返回相应的响应 - 这是重要的部分 - 无需与上述后端系统对话.

因此,如果我的应用程序包含表单上的行:

 Object b = callBackend(a);
Run Code Online (Sandbox Code Playgroud)

我希望框架首先捕获callBackend()返回的b给定参数a,然后当我在任何以后执行干运行时说"嘿,给定此调用应该返回b".a和b的值将相同(如果不是,我们将重新运行录制步骤).

我可以覆盖提供API的类,因此所有捕获的方法调用都将通过我的代码(即不需要字节代码检测来改变我控制之外的类的行为).

我应该研究什么框架才能做到这一点?


编辑:请注意,赏金猎人应提供实际代码,以证明我寻找的行为.

java

40
推荐指数
2
解决办法
3965
查看次数

在现有代码中为常量创建静态导入的简单方法?

如果我在Foo中有一个恒定的BAR,我将在C类中使用它,我将不得不写

Object o = Foo.BAR + "...";
Run Code Online (Sandbox Code Playgroud)

我可以在Eclipse中使用Ctrl-Shift-M(光标在BAR上)来创建静态导入,如下所示:

import static Foo.BAR;

Object o = BAR + "....";
Run Code Online (Sandbox Code Playgroud)

我目前正在更新遗留代码,其中有数以千计的这些代码我想转换为静态导入.Ctrl-Shift-O/Organize导入不会这样做.有没有我错过的技巧?


编辑:实际上,我更喜欢的是告诉Eclipse我想让Ctrl-Shift-M在这个特定类中的所有实例上做它的魔力,而不仅仅是我放置光标的单个实例.(这是遗留代码所以这实际上提高了可读性:))


编辑:我发现IntelliJ建议这样做.

java eclipse

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

正确修复Java 10抱怨jaxb-impl 2.3.0的非法反射访问?

我们正在考虑将一些遗留代码升级到Java 10.由于JAXB默认不可见(编辑:正确的长期解决方案不是使用各种JVM标志来规避症状,而是正确修复它)我已将此片段添加到我的pom.xml:

    <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

不幸的是,在stderr启动时仍然会出现警告.显然这不是正确的解决方法.

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/home/tra/.m2/repository/com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector
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=debug是:

WARNING: Illegal …
Run Code Online (Sandbox Code Playgroud)

java jaxb maven java-10

36
推荐指数
3
解决办法
8850
查看次数

如何判断我是否从脚本登录到私有Docker注册表?

如何判断我是否从脚本登录到私有Docker注册表服务器?换句话说,已经docker login some.registry.com成功运行?

注意:我问的是一个任意的私人注册表,而不是docker.io注册表.

docker

35
推荐指数
4
解决办法
1万
查看次数

想要并行运行非线程安全库 - 可以使用多个类加载器来完成吗?

我正在开发一个项目,在这个项目中,我们使用的库不能保证线程安全(并且不是),并且在Java 8流场景中是单线程的,它可以按预期工作.

我们希望使用并行流来获得低悬挂可扩展性的成果.

不幸的是,这导致库失败 - 很可能是因为一个实例干扰了与另一个实例共享的变量 - 因此我们需要隔离.

我正在考虑为每个实例(可能是本地线程)使用单独的类加载器,据我所知,这应该意味着,出于所有实际目的,我需要隔离,但我不熟悉为此目的故意构建类加载器.

这是正确的方法吗?为了获得适当的生产质量,我该如何做?


编辑:我被要求提供有关触发问题的情况的其他信息,以便更好地理解它.问题仍然是关于一般情况,而不是修复图书馆.

我可以完全控制库创建的对象(https://github.com/veraPDF/)

<dependency>
    <groupId>org.verapdf</groupId>
    <artifactId>validation-model</artifactId>
    <version>1.1.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

使用项目maven存储库来存在工件.

<repositories>
    <repository>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <id>vera-dev</id>
        <name>Vera development</name>
        <url>http://artifactory.openpreservation.org/artifactory/vera-dev</url>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

目前,强化图书馆是不可行的.


编辑:我被要求显示代码.我们的核心适配器大致是:

public class VeraPDFValidator implements Function<InputStream, byte[]> {
    private String flavorId;
    private Boolean prettyXml;

    public VeraPDFValidator(String flavorId, Boolean prettyXml) {
        this.flavorId = flavorId;
        this.prettyXml = prettyXml;
        VeraGreenfieldFoundryProvider.initialise();
    }

    @Override
    public byte[] apply(InputStream inputStream) {
        try {
            return apply0(inputStream);
        } catch (RuntimeException e) {
            throw e;
        } catch (ModelParsingException …
Run Code Online (Sandbox Code Playgroud)

java multithreading classloader

28
推荐指数
3
解决办法
2117
查看次数