- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我今天尝试了 Javas Hotswap,它运行得很好。在我的测试过程中,我偶然发现了一种相当奇怪的行为。这是我的代码:
public class Test extends JFrame implements ActionListener{
private JButton c;
private int f =1;
/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
}
public Test(){
this.setPreferredSize(new Dimension(800, 600));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
c = new JButton("Click");
c.addActionListener(this);
this.add(c);
this.pack();
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
c.setText(String.valueOf(f++));
}
}
请注意末尾处的行 c.setText(String.valueOf(f++));
。如果我在程序运行时将其切换为 f--
,我会注意到更改后第一次单击按钮时,该值仍在累加。然而,此后的点击次数计数正确。将其改回来时也会发生同样的情况。
我注意到的下一件事是:如果我将代码更改为:c.setText(String.valueOf(f+=1));
,运行 JVM 并将其热交换到 c.setText(String.valueOf(f-=1));
直接应用更改,没有点击延迟。
我现在的问题是:到底是什么导致了这种行为? f++
和 f+=1
在 JVM 代码级别上有什么区别?
最佳答案
在此代码上使用 javap:
public static void main(String[] args) throws Exception {
int i = 0;
i++;
System.out.println(i);
i+=1;
System.out.println(i);
}
返回
0: iconst_0
1: istore_1
2: iinc 1, 1
5: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
8: iload_1
9: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
12: iinc 1, 1
15: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
18: iload_1
19: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
22: return
==>没有区别
关于Java JVM 热交换行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092069/
我有一个Scala服务器应用程序,该应用程序使用gradle以及scala和application插件进行构建和运行。我使用gradle run启动应用程序。 我的 Gradle 的一部分。一个典型的
有时一些开发人员从 IntellijIdea (Ctrl+Shift+F9) 执行热交换,我们有一个启用了调试端口的公共(public)服务器他们在 IntelliJ Idea 中进行调试。我有两个问
我一直在开发一个基于 Java 的小型在线游戏,虽然还没有完成,但我想在某个时候发布它。我不认为它很快就会完成,但是,所缺少的只是一些继续的故事部分。我考虑过通过互联网连接将更新修补到游戏中(就像大多
Akka 1.1.3 文档指出“become 方法对于许多不同的事情都很有用,但它的一个特别好的例子是它用于实现有限状态机 (FSM) 的示例”。在运行时热交换 Akka actor 的实现还有哪些其
我正在尝试找出如何在使用我的构建系统进行调试时启用代码的热交换,但我很快就干涸了。 我有一个带有调试目标的 Ant 构建,如下所示:
我已经更新了最新版本的 android studio (2.1)。文档中提到,android studio 最新版本将在 android studio 的即时运行功能中支持冷热交换。 谁能告诉我热交换
我正在寻找支持(Visual Studio 的)编辑并继续类似功能的 IDE。我知道 Netbeans 有它用于 Java(称为热交换、修复并继续),但找不到任何关于 Linux 系统的 C/C++
我是 IntelliJ 的新手,我正在使用它来开发 AngularJS/Java 网络应用程序。当我更改 HTML 或 JavaScript 代码时,我总是必须重新启动应用程序服务器(我使用的是 Je
我没有 JRebel。我希望有解决方案,无需购买 JRebel。 最佳答案 您可以就地编辑 xhtml 文件(例如,在它运行的位置 - 通常是开发环境的构建区域),它将在下次刷新时更新。 我们有一个
我是一名优秀的程序员,十分优秀!