小编Col*_*lby的帖子

在匿名类中使用最终变量时的垃圾收集

如果我有类似以下的代码:

public Constructor(final Object o) {
    taskSystem.add(new CycleTask(15, 15, -1) {

        @Override
        public void execute() throws Throwable {
            //access o here every 15 cycles forever
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

什么时候会被垃圾收集,如果有的话?只有当任务被收集,或者它会永远留在记忆中,因为它是最终的?

java garbage-collection final

8
推荐指数
2
解决办法
3056
查看次数

从Java中的ProcessBuilder执行时,Windows REG命令不起作用

我正在尝试使用Java来创建一个启动注册表项,我得到一个非常奇怪的结果.在某些操作系统(如XP)上,命令可以完美运行.但是,在Windows 7上,它只会在运行已编译的jar或类时创建密钥,而不是从网页上的applet运行.此外,在Windows 8上,该命令根本不起作用.我已经尝试过调试它,似乎REG命令正在成功执行.如果我从命令提示符手动运行该命令,它将创建键,其输出与从程序内部运行时的输出相同.下面是代码示例:

public static int regadd(String key, String name, String val) throws IOException, InterruptedException {
    ProcessBuilder pb = new ProcessBuilder(new String[]{"REG", "ADD", key, "/v", name, "/d", val, "/f"});
    pb.redirectOutput(new File(PathManager.getDirectory(), "log0.txt"));

    int i = pb.start().waitFor();
    Logger.log("ADD: " + i);

    return i;
}
Run Code Online (Sandbox Code Playgroud)

在log0.txt中打印:

操作成功完成.

另外,程序的"结果"打印出来

地址:0

所以在这一点上,我不知道可能是什么问题.我知道添加到注册表的其他有趣的方法,但我想保持我的代码与所有VM分发兼容.有没有办法完成这个或修复现有的方法?

java windows registry processbuilder

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

Java Enhanced-For-Loop比传统的更快?

所以我的理解是增强的for循环应该更慢,因为它们必须使用Iterator.但是我的代码提供了混合结果..(是的我知道循环逻辑占用了循环中花费的大部分时间)

对于较少的迭代次数(100-1000),使用和不使用JIT时,增强的for循环似乎要快得多.相反,迭代次数很多(100000000),传统的循环要快得多.这里发生了什么?

public class NewMain {

    public static void main(String[] args) {

        System.out.println("Warming up");

        int warmup = 1000000;
        for (int i = 0; i < warmup; i++) {
            runForLoop();
        }
        for (int i = 0; i < warmup; i++) {
            runEnhancedFor();
        }

        System.out.println("Running");
        int iterations = 100000000;
        long start = System.nanoTime();
        for (int i = 0; i < iterations; i++) {
            runForLoop();
        }
        System.out.println((System.nanoTime() - start) / iterations + "nS");

        start = System.nanoTime();
        for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

java performance loops for-loop

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