小编Hol*_*ger的帖子

IF_ICMPNE是什么意思?

对于以下Java类:

public class ArtClass {
   public boolean foo(int x) {
      if(x == 3956681)
        return true;
      else if(x == 9855021)
        return true;
      else if(x == 63085561)
          return true;
      else
        return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

它的JVM指令是:

I4 Branch 1 IF_ICMPNE L3
I13 Branch 2 IF_ICMPNE L5
I22 Branch 3 IF_ICMPNE L7
Run Code Online (Sandbox Code Playgroud)

据我所知,第一个分支是在第三行与同为第二和第三分支但到底是什么IF_ICMPNE意思,也做什么I4,I13以及I22是什么意思?

java jvm bytecode jvm-bytecode

0
推荐指数
1
解决办法
169
查看次数

DoubleStream和LongStream的范围方法

为什么DoubleStreamLongStream没有与以下类似的方法(IntStream中存在):

public static IntStream range(int startInclusive, int endExclusive);
public static IntStream rangeClosed(int startInclusive, int endInclusive);
Run Code Online (Sandbox Code Playgroud)

有什么特别的原因吗?

java java-8 java-stream

0
推荐指数
1
解决办法
89
查看次数

malloc 像 calloc 一样工作

malloc 运行时,会生成内存块,不设置任何值,包含垃圾值。当 calloc 运行时,会像 malloc 函数一样发生一些事件,但有一个区别。当 calloc 生成新块时,它在块中设置 0(零)。

#include <stdio.h>
#include <stdlib.h>
int main(void){
    int i,j;
    int* array1 = (int*)malloc(sizeof(int)*5);
    int* array2 = (int*)calloc(sizeof(int),5);
    for(i = 0; i < 5; i++){
        printf("%p: %d\n",&array1[i],array1[i]);
    }
    printf("===================\n");
    for(j = 0; j < 5; j++){
        printf("%p: %d\n",&array2[j],array2[j]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据此信息,前五个值必须包含垃圾值(实际上它应该看起来像随机数据),后五个值必须为零。但是当这段代码在 Windows 中运行时,没有问题,但是当这段代码在 Linux 中运行时,这种情况不会发生。我以为是ASLR还是DEP保护,我把ASLR关掉了,用旧的Linux系统做DEP保护,结果还是一样。最后,我认为它可能取决于 C Standard,并且我在编译 Code 时更改了 C Standard,但结果并没有什么不同。我问这是什么原因。

c malloc memory-management calloc

0
推荐指数
1
解决办法
77
查看次数

没有代理的仪器 Java 字节码

是否可以在没有 Java 代理的情况下动态检测 Java 字节码?我之前使用 Java 代理检测过字节码,做了类似的事情:

ClassFileTransformer myTransformer = new Transformer();
instrument.addTransformer(myTransformer, true);
instrument.retransformClasses(classInstance);
instrument.removeTransformer(myTransformer);
Run Code Online (Sandbox Code Playgroud)

但是,如果不使用 Java 代理,这可能吗?我想要做的是调用一个方法,该方法将在 JVM 运行后的任何给定时间进行检测,而无需使用代理。

instrumentation bytecode agent java-bytecode-asm

0
推荐指数
1
解决办法
1244
查看次数

Runnable和Thread抽象类吗?

这个问题可能很愚蠢,我对Java和面向对象编程都很陌生.现在,我正在学习我的学期考试,我有这个问题:是RunnableThread抽象课吗?

java oop class runnable

-1
推荐指数
1
解决办法
3554
查看次数

Java 8流API:获取第一个找到的集合元素

有一节课

public class Event {
    public boolean isActive() {
        //...
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

有一个TreeSet<Event> events持有数千个元素.我需要有效地找到任何活动Event并获得元素.

我想用a parallelStream来利用多线程.

是否可以像anyMatch()仅返回找到的元素一样进行操作?

boolean hasActiveEvent = events.parallelStream().anyMatch(event -> event.isActive());
Run Code Online (Sandbox Code Playgroud)

java java-stream

-1
推荐指数
1
解决办法
118
查看次数

转换为循环到流的双倍?

我只是好奇我是否可以切换它

 for (String arg : args) {
        int number = Integer.parseInt(arg);
        int checksum = 0;

        for (int digits = 0; digits < 10; digits++) {
            checksum += number % 10;
            number /= 10;
        }
        System.out.println(checksum);
    }
}
Run Code Online (Sandbox Code Playgroud)

到一个管道Java流(只有那个条件,没有递归方法等).

我的第一次尝试是

    public static void main(String... args) {
    Stream.of(args)
            .?
    }
Run Code Online (Sandbox Code Playgroud)

然后以某种方式使用如下函数:

class FunctionTest implements Function<String, Integer> {
    @Override
    public Integer apply(String s) {
        int number = Integer.parseInt(s);
        int checksum = 0;

        IntStream.range(1,10).reduce(number, ()-> ?)

            checksum += number % 10;
            number /= 10; …
Run Code Online (Sandbox Code Playgroud)

java replace for-loop java-stream

-1
推荐指数
1
解决办法
629
查看次数

如果在字符列表中找到字符串,则使用Java 8 Streams替换字符串中的字符

输入= M+a?i*n S=t

期望值= M a i n s t

每个角色从比较输入与字符的下面的列表,如果发现有空格替换它和输出中应expectedValue

。,(,:,;,),{,*,+,_,-,!,?,〜,%,=,¦,¬,¢,\,<,>,&,,,},$, '',`,@,[,],±,Ñ,P¦,_,$

java java-8 java-stream

-1
推荐指数
1
解决办法
4053
查看次数

为什么 Vector&lt;String&gt; 在以多线程样式访问时不以同步方式运行

根据我的理解,如果一个线程已经在访问它,Vector 应该阻止其他线程的整个集合。我在尝试着

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.CopyOnWriteArrayList;

public class MyTest1{
    
//  static ArrayList<String> l1 = new ArrayList<>(Arrays.asList("A", "B", "C"));
    static Vector<String> l1 = new Vector<>(Arrays.asList("A", "B", "C"));
//  static List<String> l1 = Collections.synchronizedList(Arrays.asList("A", "B", "C"));

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyThread1());
        Thread t2 = new Thread(new MyThread2());
        t1.start();
        t2.start();
        System.out.println(Thread.currentThread() + "adding X " + l1.add("X"));
        System.out.println(Thread.currentThread() + "adding Y " + l1.add("Y"));
        System.out.println(Thread.currentThread() + …
Run Code Online (Sandbox Code Playgroud)

java collections concurrency multithreading

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

迭代 List 并显示每个对象的一个​​字段的值的最有效方法是什么?

OrderDTO在列表中有很多对象。

包含 2 个项目的示例:

final List<OrderDTO> orderList = new ArrayList<OrderDTO>();

final List<OrderDTO> orderList = new ArrayList<OrderDTO>();
final OrderDTO order1 = new OrderDTO("1", "100");
final OrderDTO order2 = new OrderDTO("2", "200");
orderList.add(order1);
orderList.add(order2);
Run Code Online (Sandbox Code Playgroud)

OrderDTO有字段,例如orderIdstateId

我想在日志中显示:

"1", "2" 
Run Code Online (Sandbox Code Playgroud)

或者

"100", "200"
Run Code Online (Sandbox Code Playgroud)

在 Java 11 中,迭代列表并显示每个对象的一个​​字段的值的最有效方法是什么?

java foreach java-stream java-11

-1
推荐指数
1
解决办法
82
查看次数