小编Pet*_*rey的帖子

有没有办法比较lambdas?

假设我有一个使用lambda表达式(闭包)定义的对象列表.有没有办法检查它们,以便可以进行比较?

我最感兴趣的代码是

    List<Strategy> strategies = getStrategies();
    Strategy a = (Strategy) this::a;
    if (strategies.contains(a)) { // ...
Run Code Online (Sandbox Code Playgroud)

完整的代码是

import java.util.Arrays;
import java.util.List;

public class ClosureEqualsMain {
    interface Strategy {
        void invoke(/*args*/);
        default boolean equals(Object o) { // doesn't compile
            return Closures.equals(this, o);
        }
    }

    public void a() { }
    public void b() { }
    public void c() { }

    public List<Strategy> getStrategies() {
        return Arrays.asList(this::a, this::b, this::c);
    }

    private void testStrategies() {
        List<Strategy> strategies = getStrategies();
        System.out.println(strategies);
        Strategy a = (Strategy) …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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

奇怪的数组返回类型

有没有人看过[]像这样的方法签名后放置的数组?

public static String mySplit(String s)[] {
    return s.split(",");
}

public static void main(String... args) {
    String[] words = mySplit("a,b,c,d,e");
    System.out.println(Arrays.toString(words));
}
Run Code Online (Sandbox Code Playgroud)

版画

[a, b, c, d, e]
Run Code Online (Sandbox Code Playgroud)

在过去,奇怪的符号一直是"C"兼容性,但我不会想象有人在C中写这个.

有谁知道为什么这甚至被允许?

我正在使用Java 7更新10,以防万一.

这在Java 6中也是如此.http://ideone.com/91rZV1


BTW这不编译,我也不期望它

public static <T> List mySplit(String s)<T> {
    return Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)

java arrays syntax declaration

72
推荐指数
3
解决办法
2224
查看次数

未使用的导入和对象是否会对性能产生影响

我有一个疑问,Java代码中未使用的导入和未使用的对象是否会产生任何性能影响?

假设一个对象被初始化并且从未使用过,会发生什么?未使用的进口成本是多少?

java import bytecode packages

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

Java中的int [large] [small]或int [small] [large]之间是否存在低级差异?

这个问题可能需要一些编译器知识才能回答.我目前正在开发一个项目,我将创建一个可能是其中的数组

int[2][veryLargeNumber]
Run Code Online (Sandbox Code Playgroud)

要么

int [veryLargeNumber][2]
Run Code Online (Sandbox Code Playgroud)

它在逻辑上没有区别,但我认为内存中的形式(以及因此大小)可能不同(也许问题应该是,编译器是否足够聪明地重新排列数组以适应它们)?

java memory arrays jvm multidimensional-array

62
推荐指数
3
解决办法
2363
查看次数

内存泄漏?为什么java.lang.ref.Finalizer吃了这么多内存

我在我的程序上运行了一个堆转储.当我在内存分析器工具中打开它时,我发现java.lang.ref.Finalizerfor org.logicalcobwebs.proxool.ProxyStatement占用了大量内存.为什么会这样?

截图

java memory finalizer proxool

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

Java中的随机加权选择

我想从一个集合中选择一个随机项目,但是选择任何项目的机会应该与相关的权重成比例

示例输入:

item                weight
----                ------
sword of misery         10
shield of happy          5
potion of dying          6
triple-edged sword       1
Run Code Online (Sandbox Code Playgroud)

所以,如果我有4个可能的项目,那么获得任何一个没有权重的项目的机会将是1/4.

在这种情况下,用户获得痛苦之剑的可能性应该是三角剑的10倍.

如何在Java中进行加权随机选择?

java random double

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

是否支持在HotSpot JVM中删除压缩字符串?

在此页面甲骨文的Java HotSpot虚拟机的选项,它会列出-XX:+UseCompressedStrings作为默认选项和.但是在Java 6更新29中,默认情况下它处于关闭状态,并且在Java 7 update 2中它会报告警告

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option UseCompressedStrings; support was removed in 7.0
Run Code Online (Sandbox Code Playgroud)

有谁知道删除此选项背后的想法?


在java中对巨大的file.txt进行排序

有了-mx2g这个例子,选项打开了4.541秒,在Java 6更新29中关闭了5.206秒.很难看出它会影响性能.

注意:Java 7更新2需要2.0 G,而没有压缩字符串的Java 6更新29需要1.8 GB,压缩字符串只需要1.0 GB.

java performance jvm java-7

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

Java:为什么我们应该在现实世界中使用BigDecimal而不是Double?

在处理现实世界的货币价值时,我建议使用BigDecimal而不是Double.But我没有一个令人信服的解释,除了"通常是这样做".

你能否对这个问题嗤之以鼻?

java floating-point double bigdecimal

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

JVM堆栈,堆和线程如何映射到物理内存或操作系统

编译器书(The Dragon book)解释了在堆栈上创建的值类型,并在堆上创建了引用类型.

对于Java,JVM还在运行时数据区域中包含堆和堆栈.在堆上创建对象和数组,方法帧被推送到堆栈.所有线程共享一个堆,而每个线程都有自己的堆栈.下图显示了这一点:

在此输入图像描述

有关Java运行时数据区的更多信息.

我不明白的是,由于JVM本质上是一个软件,那些JVM堆,堆栈和线程如何映射到物理机器?

如果有人可以比较Java和C++之间的这些概念,我将不胜感激.因为Java在JVM上运行,但C++没有.

为了使这个问题更加准确,我想知道以下内容:

  1. 与Java相比,C++运行时数据区是什么样的?一张图片会有所帮助,我找不到像上面的JVM那样好的图片.
  2. JVM堆,堆栈,寄存器和线程如何映射到操作系统?或者我应该问他们如何映射到物理机器?
  3. 每个JVM线程只是一个用户线程并以某种方式映射到kernal是真的吗?(用户线程与内核线程)

更新:我为进程的运行时物理内存绘制了一张图片.
在此输入图像描述

c++ java memory jvm runtime

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

如果父类具有参数构造函数,为什么在父类中需要默认构造函数?

为什么默认构造函数在父类中是必需的(显式),如果它有一个有争议的构造函数

class A {    
  A(int i){    
  }
}

class B extends A {
}

class Main {    
  public static void main(String a[]){
    B b_obj = new B();
  }
}
Run Code Online (Sandbox Code Playgroud)

这将是一个错误.

java

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