当前位置: 首页 > 面试题库 >

Java 7和8中方法的最大大小

裴兴学
2023-03-14
问题内容

我知道Java的方法不能大于64
KB。该限制导致我们从JavaCC语法生成的代码出现问题。我们在使用Java
6时遇到了问题,并且能够通过更改语法来解决此问题。是否已针对Java 7更改了限制,或者已针对Java 8计划了限制?

为了清楚起见。我不需要一个大于64 KB的方法。但是我写了一个可以编译成很大方法的语法。


问题答案:

根据JVMS7:

end_pc是排他性的事实是Java虚拟机设计中的一个历史错误:如果某个方法的Java虚拟机代码正好是65535字节长,并且以一条1字节长的指令结尾,那么该指令就不能受到保护。由异常处理程序。编译器编写者可以通过将任何方法,实例初始化方法或静态初始化程序(任何代码数组的大小)的已生成Java虚拟机代码的最大大小限制为65534字节来解决此错误。

但这是关于Java 7 Java 8没有最终规格,因此没有人(除其开发人员以外)可以回答这个问题。

UPD(2015-04-06)
根据JVM8,它也适用Java 8



 类似资料:
  • 我有下面的代码,其中计算最小和最大订单项目从列表并按预期工作。我想知道是否可以进一步重构/改进,使其更优化和高性能地处理数千或订单列表。 我故意不做 Collections.min(itemFrequencyMap.values()) 和 因为它需要对所有值进行两次迭代,然后再次循环遍历 以查找值和的条目。

  • 问题内容: 我知道Java中一个方法的最大大小为64k。如果超过该限制,我们将收到一个编译器警告,例如“代码太大而无法编译”。所以我们可以称这为Java的缺点吗? 我们可以增加这个大小限制,还是真的有可能增加? 关于此方法大小还有其他想法吗? 问题答案: 以我的经验,64KB的限制只是生成代码的问题。尤其是 初始化大型数组时(通过代码完成) 在结构良好的代码中,每种方法的长度都是可管理的,并且比此

  • 问题内容: 是否有一种简洁的方法可以一次性提取流的最小值和最大值(基于某个比较器)? 似乎有很多方法可以分别获取最小值和最大值,或者我可以将流分类为一个临时对象,例如: 但这并不简洁,需要分配一个临时对象。我宁愿不分配一个临时对象,也不希望两次通过流。有其他选择吗? 问题答案: 如果这是经常需要的功能,我们最好做一个。我们将需要一个类来保存,并需要使用工厂方法来创建统计收集器。 (也许更好的便捷方

  • 是否有一种简洁的方法可以在一次过程中提取流的最小值和最大值(基于某个比较器)? 似乎有很多方法可以单独获取最小值和最大值,或者我可以将流排序为临时对象,例如: 但这并不简洁,需要分配一个临时对象。我宁愿不要分配一个临时对象,也不要在流中进行两次传递。有其他选择吗?

  • 问题内容: 在oracle文档中,我发现: -Xmxsize以字节为单位指定内存分配池的最大大小(以字节为单位)…默认值是在运行时根据系统配置选择的。 这是什么 系统配置 是什么意思? 问题答案: 它取决于实现和版本,但通常取决于所使用的VM(例如,客户端或服务器,see 和参数)以及您的系统内存。 默认值通常是物理内存的1/4或1GB(以较小者为准)。 Java配置选项(命令行参数)也可以“外包

  • 问题内容: 我想使用java 8流方法从列表中获取最大值。 结构如下: 我读取了一个csv文件,并将每一行的数据存储在一个单独的type对象中。 所有这些对象都存储在一个名为 所有对象都有一个字段: a 包含2个字段:和 public class Round{ private List hits; } public class Hits{ private int numberOfGames; pr