我有这个Java源文件:
import java.util.function.*;
public class t {
public static void main(String[] args) {
Function<Integer,Integer> r = (a) -> a*a+2*a+1;
System.out.println(r.apply(2));
}
}
我编译它,并且按预期方式工作。这是的输出javap -c -v t
,我找不到lambda的位置。Integer
每当调用lambda时,告诉jvm使用输入来计算表达式的字节码在哪里?
如果要查看lambda主体的代码a*a+2*a+1
,则应调用javap -c -v -p t
以查看 私有 方法:
private static java.lang.Integer lambda$main$0(java.lang.Integer);
descriptor: (Ljava/lang/Integer;)Ljava/lang/Integer;
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: invokevirtual #7 // Method java/lang/Integer.intValue:()I
4: aload_0
5: invokevirtual #7 // Method java/lang/Integer.intValue:()I
8: imul
9: iconst_2
10: aload_0
11: invokevirtual #7 // Method java/lang/Integer.intValue:()I
14: imul
15: iadd
16: iconst_1
17: iadd
18: invokestatic #4 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
21: areturn
LineNumberTable:
line 4: 0
为什么keytool不能在没有-keystore&-storePass标志的情况下列出根CA?
根据文档,Dart的SDK应该在Flutter下载时捆绑在一起: Dart SDK与Flutter捆绑在一起,不需要单独安装Dart 然而,我用Android Studio打开了一个现有的Flutter项目,它建议我要么“下载Dart SDK”,要么“打开Dart设置”: 显然,我需要“打开Dart设置”并告诉Android Studio在哪里可以找到Dart的SDK。但是,它无法在目录中找到它。
问题内容: 我正在运行JBoss服务器(在Eclipse内部),其中混入了一些Hibernate。我从这里安装了Oracle的ojdbc驱动程序: Oracle Database 11g第2版JDBC驱动程序 我专门下载了文件:ojdbc6dms_g.jar,该文件根据站点包含支持DMS的工具。但是,当我启动AS服务器时,得到以下信息: 当服务器尝试获取新的hibernateejb异常时。 我检查
问题内容: 我正在寻找Sun标准Java编译器的源代码。 jdk1.6.0_07有一些相关的类,但它们是接口(和)。在和下还有一些包,它们似乎是表示Java抽象语法树的接口。 但是我找不到编译器源-有人知道它在哪里吗? 问题答案: 检查此站点Java编程语言编译器(javac)组。来源在Mercurial存储库中。 jdk7 / tl / langtools(对于JDK 1.7) jdk6 / j
问题内容: Java 9中的JRE文件夹在哪里?我在某些站点中看到JRE存在于单独的分发文件夹中。但是它位于哪里? 问题答案: JDK和JRE运行时映像已在JDK 9中进行了重组。JDK运行时映像不再包含“ jre”子目录。 有关重组的摘要,请参见JDK 9发行说明(“ 模块化运行时图像”说明)。 JEP 220记录了新布局的动机和所有细节。 自2014年底以来,JDK 9的早期访问版本中就进行了
问题内容: 我知道常量池的概念以及JVM用于处理字符串文字的字符串常量池。但是我不知道JVM使用哪种类型的内存来存储String常量文字。堆栈还是堆?由于它的文字不与任何实例相关联,因此我假定它将存储在堆栈中。但是,如果没有任何实例引用该文字,则必须通过GC运行来收集文字(如果我错了,请纠正我),那么如果将其存储在堆栈中,该如何处理? 问题答案: 从技术上来说,答案都不是。根据Java虚拟机规范,