
正文
java代码实时热替换 java替换\r\n
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
myeclipse调试java代码,运行报错后,编译生成的class文件再不会更新,求指点
重启一你的 debug 程序就可以了,正常编译成功,在 ecclipse 中的代码热替换是立即起作用,不用重新启动 tomcat 之类的服务器,但是有些情况是不能正常工作的,比如,删除或修改了方法签名,另外新增静态字段它的值总是默认值。重启调试的程序就可以正常了,这只是代码热替换或者说是 ClassLoader 无法实现的功能。
相关问答
Q1: 热替换的代码实现
热替换是指在程序java代码实时热替换的运行过程中java代码实时热替换,步停止服务java代码实时热替换,只通过替换程序文件来修改程序java代码实时热替换的行为。 热替换的关键需求在于服务不能中断,修改必须立即表现正在运行的系统之中。 基本上大部分脚本语言都是天生热替换的,比如:PHP,只要替换了PHP源文件,这种改动就会立即生效,而无需重启Web服务器。
但对Java来说,热替换并非天生就支持,如果一个类已经加载到系统中,通过修改类文件,并无法让系统再来加载并重复定义这个类。因此,在Java中实现这一功能的一个可行的方法就是灵活运用ClassLoader。
注意:由不同ClassLoader加载的同名类属于不同的类型,不能相互转换和兼容。即两个不同的ClassLoader加载同一个类,在虚拟机内部,会认为这2个类是完全不同的。
根据这个特点,可以用来模拟热替换的实现,基本思路如下图所示:
Q2: java类被热替换后,原先类中起的线程会消失吗,求高手赐教
不会的
你的class能被hotswap,这个class的所有对象肯定是必须已经被回收的,对象的回收并不影响在对象中开启的线程,线程有自己的运行栈空间。
Q3: java 报这段错误时什么原因
这是热代码替换提醒。
Eclipse有这种功能:当你在调试程序java代码实时热替换的时候,如果对源代码进行了修改,那么所做的修改会实时反映到当前的调试结果中,而不会中断当前正在运行的调试进程。但是当修改方法名称或是其java代码实时热替换他一些关键性区域时(比如类名从Test修改为Others),热代码替换功能将不起作用。这时就会弹出这种警告。
选择第一个按钮,则调试继续进行,不过这时你所看到的代码还是之前没有修改过的代码。
选择第二个是查看详细信息。
选择第三个按钮,则结束调试。
选择第四个按钮,则将修改编译后重新运行调试,这时你看到的是最新的代码。
Q4: eclipse编辑器多了许多不要的东西如图
这个东西弹出来是个好事java代码实时热替换,否则明天java代码实时热替换你又会问java代码实时热替换,怎么别人 debug 时改了代码不用重新启动程序就可以起作用而我改了之后不起作用。
你可以在参数页找到 “启用 hot replace”的选项,关掉它。
这个功能叫”代码热替换“,就是在你不重启程序的情况下,改的代码有些可以立即起作用,而就算 Java 程序运行在远程联网的一台机器上都可以(服务器和 Eclipse 不在同一台机器,你在 Eclipse 中修改代码保存后编译它就立即更新到服务器去了,不需要你部署程序到服务器),但这个功能是有些限制的,比如当你的改动不兼容,比如你不能删除一个已经有的方法或成员变量(局部变量没关系),也不能改动已经有的方法的签名,那些修改都是不兼容的,导致 class 的内部版本号变了,这个时候它就会弹你这个提醒框说你的修改在不重启程序的情况下是无法起作用的。
这个功能非常实用,特别是当你在企业应用中发现一个 bug,想要修正它并测试需要准备很多数据和很多前提步骤时,要是你一次修改没有完全解决问题你需要反复试验,这不知道节省你多少时间,有些大型企业应用,部署一个程序就需要十分钟时间,你一天的时间还不够你试几次的,节省你大量的等待时间。
java代码实时热替换的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java替换\r\n、java代码实时热替换的信息别忘了在本站进行查找喔。








