Tag: jvm

Java中variables的内存地址

请看下面的图片。 当我们使用new关键字在java中创build一个对象时,我们从OS获取一个内存地址。 当我们写出out.println(objName)我们可以看到一个“特殊的”string作为输出。 我的问题是: 这是什么输出? 如果是由操作系统给我们的内存地址: a)如何将此string转换为二进制文件? b)如何获得一个整数variables地址?

你如何崩溃一个JVM?

我正在读一本关于编程技巧的书,作者问受访者:“你如何使JVM崩溃?” 我认为你可以通过编写一个无限的for循环来最终用完所有的内存。 有人有什么想法吗?

为什么这个方法打印4?

我想知道当你试图捕获一个StackOverflowError会出现什么情况,并提出了以下方法: class RandomNumberGenerator { static int cnt = 0; public static void main(String[] args) { try { main(args); } catch (StackOverflowError ignore) { System.out.println(cnt++); } } } 现在我的问题: 为什么这个方法打印“4”? 我想也许是因为System.out.println()需要调用堆栈中的3段,但我不知道数字3来自哪里。 在查看System.out.println()的源代码(和字节码)时,通常会导致比3更多的方法调用(因此调用堆栈上的3个段将不够用)。 如果是因为热点虚拟机应用(方法内联)的优化,我想知道在另一个虚拟机上的结果会不同。 编辑 : 由于输出看起来是JVM特有的,我得到了使用的结果 Java(TM)SE运行时环境(build 1.6.0_41-b02) Java HotSpot(TM)64位服务器虚拟机(构build20.14-b01,混合模式) 解释为什么我认为这个问题不同于理解Java堆栈 : 我的问题不是为什么有一个cnt> 0(显然是因为System.out.println()需要堆栈大小,并在打印之前抛出另一个StackOverflowError ),但为什么它有特定的值4,分别为0,3, 8,55或其他系统上的其他东西。

Java方法声明中的最大参数数目

Java中一个方法的最大参数数量是多less?为什么? 我在64位Windows系统上使用Java 1.8。 关于这个StackOverflow的所有答案说,技术限制是255个参数,没有指定为什么。 准确地说,255是静态的,254是非静态的( this将是这种情况下的255)方法。 我认为这可以用某种规范来描述,并且只有一个静态定义的允许的最大参数数量。 但是这只对int和所有4字节types有效 。 我用long参数做了一些testing,在这种情况下我只能声明127个参数。 使用String参数,从testing推导出的允许的数字I是255(这可能是因为参考大小是Java中的4个字节?)。 但是由于我使用的是64位系统,引用大小应该是8字节宽,所以对于String参数,最大允许数应该是127,类似于longtypes。 这个限制如何正确应用? 限制与方法的堆栈大小有什么关系? 注意:我不会用任何方法使用这些参数,但这个问题只是为了澄清确切的行为。

Java:int数组使用非零元素进行初始化

根据JLS,一个int数组在初始化之后应该被零填充。 但是,我面临的情况并非如此。 这种行为首先发生在JDK 7u4中,并且也出现在以后的所有更新(我使用64位实现)中。 以下代码引发exception: public static void main(String[] args) { int[] a; int n = 0; for (int i = 0; i < 100000000; ++i) { a = new int[10]; for (int f : a) if (f != 0) throw new RuntimeException("Array just after allocation: "+ Arrays.toString(a)); Arrays.fill(a, 0); for (int j = 0; […]

jVisualvm中抽样和分析之间的区别

VisualVM有两个单独的选项卡用于采样和分析。 有人能帮我弄清VisualVM中采样和分析之间的区别吗?

Java 8代码可以编译为在Java 7 JVM上运行吗?

Java 8引入了重要的新语言function,如lambdaexpression式。 这些语言变化是否伴随着编译的字节码中的重大变化,如果不使用某些retrotranslator,将会阻止它在Java 7虚拟机上运行?

字节码function在Java语言中不可用

在Java字节码中,你现在可以做什么(Java 6),你不能在Java语言中做什么? 我知道两者都是图灵完整的,所以阅读“可以做”为“可以明显更快/更好,或者只是以不同的方式”。 我正在考虑像invokedynamic这样的额外的字节码,除了特定的版本是未来的版本之外,它不能用Java生成。

Java“虚拟机”与Python“解释器”的说法?

在Java中使用“虚拟机”时,读取Python“虚拟机”似乎很less见。 两者都解释字节码,为什么称一个虚拟机,另一个解释器?

Java编译器和JVM编写的语言是什么?

Java 编译器 ( javac ),虚拟机(JVM)和java启动器编写的语言是哪种?