小编Tam*_*más的帖子

Java - 不可变数组线程安全

我有一个关于Java内存模型的问题.这是一个介绍问题的简单类:

public class ImmutableIntArray {

    private final int[] array;

    public ImmutableIntArray() {
        array = new int[10];
        for (int i = 0; i < 10; i++) {
            array[i] = i;
        }
    }

    // Will always return the correct value?
    public int get(int index) {
        return array[index];
    }

}
Run Code Online (Sandbox Code Playgroud)

据我所知,JMM保证在构造之后其他线程可以看到最终字段的值.但是我希望确保其他线程在构建之后能够看到存储在数组中的最新数据版本.

当然上面的代码只是一个呈现问题的简单示例,实际上我想为直接字节缓冲区实现一个简单的缓存,我不想依赖一些Collection类.目前我正在使用ReentrantReadWriteLock来确保正确的行为,但如果可能的话我想避免它.

java concurrency immutability thread-safety java-memory-model

10
推荐指数
1
解决办法
1705
查看次数

Java - SAM类型优化

工作文件描述的状态Lambda项目提到所谓的SAM(一个抽象方法)的类型.据我所知,当前的lambda建议不会影响运行时只是编译器,可以实现从lambda表达式到这些类型的自动转换.

我认为在理想情况下,SAM类型的实例可以由函数指针在内部表示.因此,JVM可以避免为这些实例分配内存.

我想知道现代虚拟机是否能够提供这样的优化.

java optimization jvm internals java-8

7
推荐指数
2
解决办法
3204
查看次数