在类层次结构中混合 Java 1.4 和 1.6 字节码

2023-12-02

先问问题,故事如下:

在类层次结构中混合不同的字节码版本是否安全?有哪些风险?

对于一种情况,C类扩展B,B类扩展A类。A类实现接口I。 我的问题将涉及以下示例场景:

  • A 类编译为 Java 1.6 字节码,并具有 1.6 特性,如泛型等。继承人 B 和 C 被编译为 1.4 字节码。
  • 接口我编译为1.6,而实现者编译为1.4。
  • 其他涉及不同版本字节码的奇异继承场景。

我尝试了尽可能多的场景,似乎运行得很好。不过我还是很想在这里问一下,因为我只了解Java的表面;我知道如何编码和调整 Java,但并不真正知道幕后发生了什么。

现在,对于那些忍不住要问“为什么你需要这样做???”的人来说。

我正在参与一个项目,评估旧版 Java 1.4 Swing 应用程序(通过 RMI 连接到 EJB 2)到 Java 1.6 Swing(连接到也在 1.6 之上运行的较新版本的 App Server)的迁移。 J2EE 平台仍为 1.4 (EJB 2)。

迁移不会是“将所有内容重新编译到 1.6”,而是“将新功能编码并编译到 1.6”。 他们做事的方式是这样的: 他们在 CVS 中只有一条路径,每个人都在那里提交。没有任何标签/分支来获取生产代码。 每当需要添加新功能时,他们都会从生产服务器获取 JAR,分解它们,根据需要替换或添加新类,重新打包 jar,然后将它们放回服务器。 因此,如果他们使用Java 6来编译并使用上述方法进行部署,将会出现很多1.4和1.6字节码的奇特混合。


Java 1.0 和 Java 6 之间的 JVM 字节码没有显着差异。在 Java 7 中,它们添加了一条新指令。呜呼。

字节码的工作方式几乎没有变化

  • JVM 不支持嵌套类访问外部类的私有成员,这通过生成的代码来实现。
  • JVM 不支持泛型的运行时检查,例如您不能new T()其中 T 是泛型。

基本上,它们使 JVM 更智能、更快,但直到最近,人们还是不惜一切代价避免改变字节码工作方式的模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在类层次结构中混合 Java 1.4 和 1.6 字节码 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • NSString 带有表情符号/表情符号 url 编码

    我正在尝试获取可能包含特殊字符和表情符号的 UITextField 的内容 并将其转换为可以在 GET 请求中传递给 PHP 服务的内容 如果我根本不对字符串进行编码 则表情符号显示得很好 我可以在数据库中看到它们 它们会正确地返回给我 但
  • 使用 nginx 托管在 docker 中时 Blazor WASM 样式丢失

    我有一个奇怪的问题 当我尝试使用 Nginx 托管我的 blazor WASM 项目时 我的样式被破坏了 我尝试遵循几个不同的指南 它们很相似并且对我来说有同样的问题 我这里有代码 https github com TopSwagCode
  • 如何刷新绑定源

    这真的让我抓狂 我有一个绑定到绑定源的 datagridview 单击按钮我使用数据上下文将新对象添加到我的数据库中 如何使绑定源在我的数据网格中显示新对象 我已经尝试再次设置绑定源的数据源 但它不起作用 即使新数据源确实返回列表中的新对象
  • 尽管存在默认方法,但 S3 通用“没有适用的方法”

    这很棘手 因为这个问题只发生在包的上下文中 在全局命名空间中定义时 一切都按预期工作 我定义了一个 S3 泛型 名为coerce na range 它有两种方法 coerce na range factor and coerce na ra
  • macOS 文本编辑器和代码编辑器列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我搜索了这个并发现莫迪特的
  • VirtualizingStackPanel 在覆盖 ScrollViewer 的默认控件模板时停止工作

    我有一个列表框 其中包含很多渲染成本高昂的项目 然而 VirtualizingStackPanel 通过仅渲染可见项来解决这个问题 我想覆盖 ScrollViewer 的控件模板 因为默认模板在水平和垂直滚动条之间有灰色矩形 我刚刚复制了微
  • 如何使用 Joda Time 检查 DateTime 是否发生重复事件?

    I ve a DateTime代表重复事件的开始 ADays 每日周期 将代表循环周期 我认为这种反复发生的事件永远不会停止 from 2013 06 27 period 3 days nextOccurence will be 2013
  • 如何使用Python使用Bulk API将关键字存储在ES中

    我必须在与我的 python 程序集成的 ElasticSearch 中存储一些消息 现在我尝试存储的消息是 d message this is message for index nr in range 1 5 ElasticSearch
  • 使用 JPanel 列表制作表格

    我需要 Java 应用程序中的一个表 首先我习惯了类的对象JTable但我的桌子有很多功能 现在我尝试使用一系列功能JPanel组件而不是表格 如何制作包含面板列表的表格 如果您需要创建一个由以下内容组成的表JPanel含有JTextAre
  • Azure 搜索建议中存在不同的值?

    我正在将关系数据库上的搜索功能卸载到 Azure 搜索 我的产品表包含序列号 零件号等列 可以有多个具有相同零件号的序列号 我想创建一个可以自动完成零件编号的建议 但在我的场景中 我在建议中收到了很多重复项 因为在多个条目中找到了partN
  • Linux 排序命令的异常行为

    在 Linux shell 上的结果echo e arrays2 2 narrays 2 narrays3 2 sort is arrays 2 arrays2 2 arrays3 2 和结果echo e arrays2 28 narray
  • 如何为“两个”单词编写别名[重复]

    这个问题在这里已经有答案了 别名的标准用法是为扩展命令编写快捷方式 例如 alias ls ls color 我想知道是否可以在左侧添加 参数 以便以相反的方式工作 使用上面的例子 我有兴趣知道是否alias ls color ls 是可能
  • 在Android中使用aChartEngine组合两个条形图和两个折线图

    下面的代码组合了两个条形图和两个折线图 public class GraphCombination private Context context private String weekDays new String Sunday Mond
  • 在 Django 模型中设置主键起始值

    我正在准备一个模型如下 class SomeModel models Model id models BigIntegerField primary key True null False unique True 但我的主键必须是有效的 9
  • C# 已建立的连接被主机中的软件中止

    这些错误在我的游戏服务器上变得越来越频繁 它们导致服务器不断关闭并重新启动 System Net Sockets SocketException 0x80004005 An established connection was aborte
  • 对 STL 字符串使用 fread/fwrite。这是对的吗?

    我有一个包含字符串的结构 像这样的东西 struct Chunk int a string b int c 因此 我想我无法使用 fread 和 fwrite 函数从文件中写入和读取此结构 因为字符串可能保留不同的内存容量 但这样的代码可以
  • 编辑音频/重新录制文件的一部分

    我希望用户能够在应用程序中录制音频 然后能够选择文件的一部分并重新录制 例如 也许他们最初录制 现在怎么样 棕色母牛 然后选择该结尾并重新录制 皱眉母猪 这将被合并到初始文件中 该文件将是 现在怎么样 皱眉母猪 这似乎比我想象的要困难得多
  • 应用程序网关 - 502 错误

    我已经按照 MS 文档设置了一个新的应用程序网关 我已经配置了后端池 它通过 FQDN 连接到应用程序服务 不知何故 每次浏览应用程序网关时 我都会立即收到 502 直接浏览网站没有任何问题 我已经解决了这个问题 这是解决方案 如果您的后端
  • 如何从 Java 读取 Oracle 数据库中的 CLOB 列

    我在数据库中有一个表 其中列的数据类型 STATUS 是 CLOB 我需要读取该 STATUS create table STATUS TABLE STATE ID number 20 0 STATUS clob 我正在尝试阅读如下 CLO
  • 在类层次结构中混合 Java 1.4 和 1.6 字节码

    先问问题 故事如下 在类层次结构中混合不同的字节码版本是否安全 有哪些风险 对于一种情况 C类扩展B B类扩展A类 A类实现接口I 我的问题将涉及以下示例场景 A 类编译为 Java 1 6 字节码 并具有 1 6 特性 如泛型等 继承人