草庐IT

java - Java方法的内部标识是什么?

众所周知,在Java中,方法名不足以区分不同的方法。我认为(可能是错误的),要区分一个方法,它需要以下信息:(className,methodName,methodParameters)进一步,如何在内部更有效地识别方法?我听说过“方法ID”。是不是上面的三元组和整数之间存在映射关系,所以JVM解析后只使用methodid?如果是,它是否位于符号表中?谢谢! 最佳答案 这是一个CONSTANT_NameAndType_infoStructure指向methoddescriptor.它几乎由方法名称、参数类型和(有点令人惊讶的)返回类

java - "modern JVMs"与旧版 JVM 有何不同?

这是我在高中和大学计算机科学类(class)中经常听到的一句话:"That'snotanissueformodernJVMs."通常这会出现在关于整体性能或优化策略的讨论中。然而,它总是被视为一种神奇的最终答案,好像它让问题不再值得思考。这让我想知道:原型(prototype)“现代JVM”和旧JVM之间到底有什么区别? 最佳答案 JVM技术最显着的改进是JIT:JustInTime编译器。JIT在运行时优化代码,从而产生巨大的性能提升,使Java(至少在某些领域)与C/C++程序竞争。有关动态优化(在代码运行时)与静态优化(在编译

Java 任务控制显示 "Flightrecorder is not supported for non hotspot jvms"

当我试图通过运行JavaMissionControl(jmc)来分析我的本地Java应用程序时,我无法连接到该应用程序。它在左侧Pane中显示的所有JVM进程的描述中显示“非热点JVM不支持Flightrecorder”。我的环境:Windows7,Java8u25因为我无法在网上的任何地方找到这个问题的解决方案,所以我想与将来可能遇到同样问题的其他人(以及我future的自己)分享我幸运地发现的解决方案。 最佳答案 我在这里发布解决方案和导致解决方案的观察结果。当我(碰巧)尝试运行jvisualvm时,它显示错误“无法监视本地Ja

java - try catch block 的成本是多少?

有多好:if(condition){try{//something}catch(SomeExex){}}而不是这个:try{if(condition){//something}}catch(SomeExex){}当我进入tryblock时,JVM实际上做了什么?编辑:我不想知道在第二个例子中总是进去尝试...请回答问题。 最佳答案 在运行时明智地执行,只要没有异常,尝试就不会花费你任何东西。一旦发生异常,它只会花费运行时间。在那种情况下,它比if评估要慢得多。在JVM规范中,您看到执行路径上没有生成额外的字节代码:http://do

java - 在类文件中查找对其他类的引用的简单方法

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html中描述的类文件格式包含对constantpool中其他类的所有引用作为CONSTANT_Utf8类型的条目。但这些条目不仅是对类的引用,还包括类文字、方法名称、字段等等。在第一次尝试中,我认为使用由类型为CONSTANT_Class、CONSTANT_NameAndType和CONSTANT_MethodType的其他constant_pool条目引用的常量池条目就足够了但这些似乎不包括类型参数和注释。进一步阅读规范似乎表明我需要解析类似RuntimeVisible

java - JVM 如何知道在运行时在哪里捕获异常?

根据我的理解,throw是原始的jvm命令。调用它时,JVM“检查当前调用堆栈是否可以捕获它”。如果不能,那么java会像调用return一样简单地弹出调用堆栈。然后jvm“检查当前调用堆栈是否可以捕获它”等等递归。我的问题:JVM如何通过算法知道调用堆栈中的哪个位置可以捕获给定的异常?每个调用堆栈条目中是否存储了元数据,将异常映射到代码块?堆中是否有一个静态数据结构以某种方式跟踪这个?因为某处必须有数据跟踪它。 最佳答案 JVMspecification有这方面的详细信息。特别是,section4.7.3提供有关异常表的详细信息,

java - Java 中的 switch 语句

Java中的switch语句有多少种可能?例如,如果我们要检查一个整数,有多少个caseblock是可能的? 最佳答案 您最有可能首先遇到的界限是每个类常量池中的最大条目数,即65535。这将允许几千个小复杂度的案例block。常量池包含每个在类中至少使用一次的数字或字符串文字的一个条目,但也包含一个或多个用于所有字段、方法和/或类引用的条目,因为这些条目代表其他常量组成,这些常量必须是也出现在常量池中。IE。方法引用条目由对方法签名的字符串条目的引用和对声明类的类条目的引用组成。类条目本身再次引用类名称的字符串条目。参见:Limi

java - Java 数组中的最大维数

出于好奇,Java中的数组可以有多少维? 最佳答案 Java语言不限制维数,但JavaVM规范将维数限制为255。例如下面的代码会编译失败:classMain{publicstaticvoidmain(String[]args){finalint[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]

java - Java 数组中的最大维数

出于好奇,Java中的数组可以有多少维? 最佳答案 Java语言不限制维数,但JavaVM规范将维数限制为255。例如下面的代码会编译失败:classMain{publicstaticvoidmain(String[]args){finalint[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]

java - Java 中 if/else 与 switch 语句的相对性能差异是什么?

担心我的Web应用程序的性能,我想知道“if/else”或switch语句中哪个在性能方面更好? 最佳答案 我完全同意应该避免过早优化的观点。但JavaVM确实有可用于switch()的特殊字节码。见WMSpec(lookupswitch和tableswitch)因此,如果代码是性能CPU图表的一部分,则可能会有一些性能提升。 关于java-Java中if/else与switch语句的相对性能差异是什么?,我们在StackOverflow上找到一个类似的问题:
12