Tag: jvm

拥有没有任何构造函数的JVM字节码类是否有效?

AFAIK,Java中的隐式构造函数总是为没有构造函数的类生成[1] , [2] 。 但在字节码中,我无法在JVMS上找到这样的限制。 所以: 根据JVMS来定义一个没有构造函数的类只有在下面的jasmin hello世界中使用它的静态方法是有效的吗? 除了无法创建它的实例之外还有其他任何后果吗? 根据https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.2.4 ,我将无法使用invokespecial来初始化实例,这会使new无用。 (不能使用未初始化的对象)。 Jasmin代码: .class public Main .super java/lang/Object .method public static main([Ljava/lang/String;)V .limit stack 2 getstatic java/lang/System/out Ljava/io/PrintStream; ldc “Hello World!” invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V return .end method 也就是说, 没有构造函数: .method public ()V aload_0 invokenonvirtual java/lang/Object/()V return .end method ? 使用java Main运行会给出预期的输出Hello World! 。 我检查了javap -v输出,与Java不同, jasmin没有生成默认构造函数。 […]

黄瓜JVM未定义步骤

我不能用黄瓜为项目执行简单的测试。 我在Intellij 13社区,有黄瓜插件。 我在我的function目录中编写了我的function文件,我还实现了我的步骤,在插件的帮助下创建它们。 我在intellij中识别我在function文件中的步骤,它可以导航并转到步骤实现。 但是当我尝试运行我的场景时,它总是会失败,因为对于每一步,它都会显示“Undefined step:”。 以下是我的项目的组织方式: 正如我之前所说,你可以看到我的步骤被Intellij识别: 这怎么可能,我该如何纠正? 任何帮助都会很棒! 编辑 现在我为跑步者添加了选项: @CucumberOptions( monochrome = true, features = “src/test/resources/features/”, format = { “pretty”,”html: cucumber-html-reports”, “json: cucumber-html-reports/cucumber.json” }, dryRun = false, glue = “fr.tlasnier.cucumber” ) 有用! 然而,我注意到在那之前,我有两个场景轮廓。 一个工作完美,另一个找不到步骤定义! 真的很奇怪,因为这两种情况都有一些步骤。

即使在父线程死亡或终止之后子线程如何仍然执行?

这是我的两个class级: public class Firstclass { public static void main(String args[]) throws InterruptedException { System.out.println(“Main start….”); Secondclass t1 = new Secondclass(); t1.setName(“First Thread”); Secondclass t2 = new Secondclass(); t2.setName(“Second Thread”); t1.start(); t2.start(); System.out.println(“Main close…”); } } 和 public class Secondclass extends Thread { @Override public void run() { try { loop(); } catch(Exception e) { System.out.println(“exception […]

System.gc()由核心API调用

你们中的一些人可能知道一些核心java API会对System.gc()进行显式调用。 发生这种情况时我知道两种情况: NIO。 我相信,当系统耗尽“直接”内存时,可以对直接ByteBuffers进行一些清理。 RMI。 在这里,原因对我来说并不清楚…… 所以,问题是: 知道为什么RMI需要System.gc()吗? 当核心API(甚至其他一些流行的库)可以直接调用System.gc()时,您是否知道其他任何情况?

监视Java应用程序的内存使用情况

我想在一个Java进程中运行几个REST Web应用程序,以便在Akka的帮助下轻松保存内存和扩展。 我想估计每个请求处理程序消耗多少内存并检测整个系统的危险。 是否有可能在该进程内几乎实时监视内存使用情况,并找出每个请求处理程序使用了多少内存? 我需要实现的目标是什么? 有没有工具? 是否有可能捕获out of memory exception并基于内存使用情况做一些事情,例如仅崩溃请求处理程序超出假定的内存限制? 如果是这样,那会有什么不好的?

Java app服务器能够销毁线程吗? 如果有,怎么样?

销毁线程在Java中已弃用(并未根据javadoc实现),并且中断它只是在线程预期退出时的建议,但可能不会这样做。 (不提供任何方法来杀死J VM中的线程是一个令人不安的设计,但我的问题与设计无关。) Java应用程序服务器如何卸载应用程序? 他们能以某种方式破坏正在卸载的应用程序的线程吗? 如果有,怎么样? 如果不是,那么具有无限循环的已部署应用程序的单个线程可能会导致整个应用服务器无法进行干预? 对不起,我不是为此编写测试用例,但我想知道那里到底发生了什么。

Java Hotspot服务器中的多态性成本很高

当我在Java Hotspot客户端中运行我的计时测试程序时,我得到了一致的行为。 但是,当我在Hotspot服务器中运行它时,我得到了意想不到的结果。 从本质上讲,在我试图复制的某些情况下,多态性的成本是高得令人无法接受的。 这是Hotspot服务器的已知问题/错误,还是我做错了什么? 测试程序和时间如下: Intel i7, Windows 8 Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) Mine2: 0.387028831 <— polymorphic call with expected timing Trivial: 1.545411765 <— some more polymorphic calls Mine: 0.727726371 <— polymorphic call with unexpected timing. Should be about 0.38 Mine: 0.383132698 <— direct call with expected timing 随着我添加额外的测试,情况变得更糟。 […]

如何创建自定义JVM启动器?

有一个“ 如何在没有主要方法的情况下启动应用程序 ”的问题的历史,大多数陈述类似于“ 你不能 ”的东西。 我注意到现在只需通过扩展Application即可启动JavaFX应用Application 。 我一直在使用类似于Application.launch()的方法,但在这种情况下我总是将main方法视为样板代码。 所以我开始再次寻找答案。 我发现这个答案将我们与可以学习创建自己的JVM发射器的地方联系起来,但遗憾的是文章已不复存在。 我花了很长时间寻找任何可能暗示我应该做什么的事情,但没有结果。 我的问题 如何根据正在扩展的内容创建自定义JVM启动程序来启动应用程序? 例如,想象一个具有1个声明类的项目: class MyApplcation extends App { } 启动项目不需要主要方法,因为它扩展了App。 这不是问题,尽管这是我的目标。 问题是有人如何创建自定义JVM启动器? 我的猜测是它会涉及使用某种基础,给我们某种骨架,但我不知道在哪里可以找到这样的东西。

finally块中的堆栈溢出error handling

我有一个java程序,运行无限次。 程序代码: void asd() { try { //inside try block System.out.println(“Inside try !!!”); asd(); } finally { //inside finally System.out.println(“Inside finally !!!”); asd(); } } OUTPUT:通过不断打印两个sysout,这个程序无限运行。 我的问题:在某些时候,它开始从try块中抛出StackOverflowErrors,因此它到达finally块,我们再次以递归方式调用此函数。 但是,当我们已经面临StackOverflowError时,finally块中的递归函数如何执行? JVM如何处理这种情况? 如果我们也得到OutOfMemoryErrors会发生同样的行为吗?

在未捕获的exception上生成Java堆转储

当未捕获的exception被触发时,我尝试生成堆转储。 我尝试使用jmap,但因为当exception发生时进程已完成,这是不可能的。 使用UncaughtExceptionHandler也不是选项,因为我只有执行程序的二进制文件。 谁能帮我? 编辑:通过命令行或类似方法提供该技术非常重要,因为我需要自动执行此操作。 使用GUI是没有选择的