第一个选项问题不大 。这是对 JVM 代理的明确且有意的使用 。然而 , 后者是间接的,并且可能不受所连接的 JVM 的控制 。
动态加载的问题Java 平台默认致力于实现完整性,为我们构建应用程序提供强大而坚实的基础 。代理的设计考虑到了最好的意图 , 为您提供(良性)工具的力量 。然而,为了确保这种完整性,通过(动态)代理进行检测是一个大问题,因为它们超出了您的直接控制范围,并且可能会对您的应用程序造成严重破坏 。这就是为什么您作为应用程序的所有者必须对允许和加载哪些代理做出有意识且明确的决定 。
插播一条,如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 1万+ 道 Java 面试题 , 几乎覆盖了所有主流技术面试题,还有市面上最全的技术栈500套,精品系列教程 , 免费提供 。
在Java 21 中,您仍然可以加载动态代理,但 JVM 会生成多个警告 , 通知您潜在的问题以及如何隐藏这些警告:
WARNING: A {Java,JVM TI} agent has been loaded dynamically (file:/path/to/agent.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future release未来的Java 版本将默认禁止加载动态代理,并且任何使用Attach API都会引发异常:
com.sun.tools.attach.AgentLoadException: Failed to load agent library: Dynamic agent loading is not enabled. Use -XX:+EnableDynamicAgentLoading to launch target VM.异常消息包括启用动态代理加载所需的步骤:参数-XX:+EnableDynamicAgentLoading 。因此,如果您有意识地决定允许动态代理,那么您仍然可以 。
立即禁用动态加载到目前为止,仅发出警告 。但是,您可以完全禁止动态加载 Java 代理 。您可以通过使用将(加号)与(破折号/减号)-XX:-EnableDynamicAgentLoading交换的参数来执行此操作,以强化您的应用程序或为即将到来的更改做好准备 。+-
2 结论本文中提到的两个功能的弃用对我来说是有道理的 。
Windows 10 32 位 x86 支持是一项技术债务,阻碍了创新,例如利用虚拟线程的全部功能 。
动态加载代理严重损害了 Java 平台的完整性,并且存在潜在的安全风险 。如果打击者“足够接近”可以连接到另一个 JVM,那么您可能会遇到更大的问题 。
尽管如此,我们始终必须意识到将来可能会发生变化或删除的内容 , 因为我们很可能无法决定它何时发生 。Java 通常对弃用和删除时间框架相当慷慨,某些功能可能会弃用数十年,但看不到删除的迹象 。所以很自然地 , 我们是否应该使用已弃用的 API 的问题就出现了 。
在我看来,如果可能的话,我们应该尽量避免使用已弃用的 API 。随着时间的推移,它正在成为技术债务,最终必须偿还 。没有什么比因为不相关的原因而需要升级代码更有压力的了 , 而且您多年来依赖的一些已弃用的功能最终被删除,使得升级方式比需要的更加复杂 。
推荐阅读
- 冬天减脂快还是夏天减脂快?别再搞错了,黄金减脂期可就这么几天
- 祺贵人被乱棍打死时,谁注意到她的脚了?这才是甄嬛的厉害之处
- 别再搞错了!肉桂与桂皮的区别详解
- 知三当三、私生活混乱!别再装了,陈建斌只是她的“接盘侠”
- 再这样拍下去,东南亚的黑帮,怕是不够用了
- “四川火锅”和“重庆火锅”区别大!别再以为是同一种了
- ETC不想用了怎么注销?这3个注销ETC的方法,你会选哪个?
- 收手吧温子仁!别再侮辱中国观众智商了,《海王2》上映辣评一片
- 天下不乱上一句是什么,如此安好前面一句是什么
- 64岁毕福剑罕见现身,住北京13万一平豪宅,画室杂乱老年斑明显
