在类层次结构中混合 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 字节码 的相关文章

  • 为什么 Hashtable 不允许空键或空值?

    正如 JDK 文档中所指定的 Hashtable 不允许空键或空值 HashMap 允许一个空键和任意数量的空值 为什么是这样 Hashtable 是较旧的类 通常不鼓励使用它 也许他们看到了对 null 键的需要 更重要的是 null 值
  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • IBM Websphere MQ - 用于 Tomcat 部署的 EJB 和 MDB 迁移

    我已经为此苦苦挣扎了很长一段时间 我有一个 IBM Websphere MQ 它使用 EJB 和 MDB 以下是配置ejb mdb的地方
  • 如何重复一段文本中的每个字母?爪哇语

    就像在口吃中一样 如果文本为 dean 并且乘数为 3 则结果将是 dddeeeaaannn 由提供的乘数指定的次数 public static void repeatLetters String text dean int n 3 Str
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • Java:一种将 Mime(内容)类型与 CommonsMultipartFile 中的文件扩展名相匹配的方法

    在我的公司 出于额外原因 我需要将 mime 类型与文件扩展名进行比较 我有一个CommonsMultipartFile 我正在尝试找出进行这种比较的最佳方法 我见过一个MimetypesFileTypeMap 但不确定这是否适用于此 我试
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 递归取消 allOf CompletableFuture

    如果我有 CompletableFuture
  • java:为什么主线程等待子线程完成

    我有一个简单的java程序 主线程 main 创建并启动另一个线程t class T extends Thread Override public void run while true System out println Inside
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 向Java类库添加函数

    我使用的 Java 类库在很多方面都不完整 有很多类我认为应该内置其他成员函数 但是 我不确定添加这些成员函数的最佳实践 让我们调用不足的基类A class A public A long arbitrary arguments publi
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • 使用 Hibernate Envers 的复合表

    我有一个带有复合表的应用程序 其中包含一个额外的列 一切正常 直到我们添加 Hibernate Envers Audited org hibernate MappingException 无法读取 no pack response Resp
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 假布尔值=真?

    我在一本书中找到了这段代码 并在 Netbeans 中执行了它 boolean b false if b true System out println true else System out println false 我只是不明白为什
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 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 特性 如泛型等 继承人