相关疑难解决方法(0)

测试最终字段的初始化安全性

我试图简单地测试JLS保证的最终字段的初始化安全性.这是我写的一篇论文.但是,根据我当前的代码,我无法让它"失败".有人可以告诉我我做错了什么,或者这只是我必须反复运行然后看到一个不幸的时机失败?

这是我的代码:

public class TestClass {

    final int x;
    int y;
    static TestClass f;

    public TestClass() {
        x = 3;
        y = 4;
    }

    static void writer() {
        TestClass.f = new TestClass();
    }

    static void reader() {
        if (TestClass.f != null) {
            int i = TestClass.f.x; // guaranteed to see 3
            int j = TestClass.f.y; // could see 0

            System.out.println("i = " + i);
            System.out.println("j = " + j);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的线程正在调用它:

public class TestClient {

    public static void …
Run Code Online (Sandbox Code Playgroud)

java multithreading final thread-safety jls

30
推荐指数
3
解决办法
1722
查看次数

Java对象的默认hashCode()实现

我试图理解Java的Object的hashCode(),并看到Java Object的hashCode()方法的以下代码:

package java.lang;
public class Object {

 // Some more code

 public native int hashCode();

 // Some other code

}
Run Code Online (Sandbox Code Playgroud)

现在,我们知道如果我们创建一个类,它会隐式扩展Object类,为此,我编写了一个示例示例:

package com.example.entity;
public class FirstClass {
    private int id;
    private String name;
    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

所以,这个类即:隐式FirstClass扩展Object类.

主要课程:

package com.example.app.main;
import com.example.entity.FirstClass;
    public class MainApp {
        public static void main(String[] args) {
             FirstClass fs = new FirstClass();
             fs.setId(1);
             fs.setName("TEST");
             System.out.println("The hasCode for object fs is " + fs.hashCode());
         }
 }
Run Code Online (Sandbox Code Playgroud)

正如隐式FirstClass扩展 …

java hashcode java-8

5
推荐指数
2
解决办法
1251
查看次数

-server -XX:+ UnlockExperimentalVMOptions -XX:+ EnableJVMCI -XX:+ UseJVMCICompiler时使用哪个编译器

我的JVM有-server选择,我相信它使JVM能够使用C2编译器,该编译器旨在用于服务器应用程序,该服务器应用程序的运行时间通常比客户端运行时间更长。但是,GRAAL JIT(由启用-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler)旨在替换C2,即使我同时提供以下两个选项,我的JVM也会启动。

-server -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler

最终使用哪个编译器?JIT还是C2?

java jvm java-9 graalvm java-11

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

标签 统计

java ×3

final ×1

graalvm ×1

hashcode ×1

java-11 ×1

java-8 ×1

java-9 ×1

jls ×1

jvm ×1

multithreading ×1

thread-safety ×1