草庐IT

Cucumber-JVM

全部标签

java - 不同的 (HotSpot) JVM 线程类型有什么作用?

我看到在HotSpotJVM中实现了六种线程类型:VMThread、CGCThread、PGCThread、JavaThread、CompilerThread和WatcherThread。但是我不知道哪种线程类型在做什么。到目前为止,这是我的理解:VMThread:运行VM任务,如垃圾收集器。CGCThread:并发垃圾收集器。PGCThread:并行垃圾收集器(与CGC的区别?)。JavaThread:我猜是程序的线程。CompilerThread:编译器线程?观察线程:?附加问题:其他JVM呢? 最佳答案 您可以在OpenJDK

java - jar 文件的大小会影响 JVM 的性能吗?

我想知道jar文件的大小是否对Java虚拟机的性能有任何影响?是否会出现jar文件变得太大以至于JVM无法有效运行的情况? 最佳答案 是的,jar文件的大小会影响性能。更恰当的问题是,它有什么重大影响吗?这个问题的答案是否定的。是的,jar文件有时会变得太大并影响JVM。我不知道它在哪里,但它接近系统内存的大小。如果JVM无法在不交换的情况下加载整个JAR文件和系统内存中的Java库,这肯定会影响性能。这不是您需要关心的事情。不要在类路径中包含未使用的JAR文件。不要在项目JAR文件中包含一堆未使用的代码。我非常怀疑您是否会创建接近

java - 我如何确定 Hotspot JVM 决定重新编译 JIT :ed code a second time? 的原因

我正在尝试为对延迟敏感的Java应用程序编写预热例程,以优化前几个事务,否则这些事务会因动态类加载和JIT(主要)而变慢。我面临的问题是,即使我的预热代码加载了所有类并通过多次调用它们(至少100次-XX:CompileThreshold)来练习它们,稍后当实际用户登录这些相同的函数时仍然标记为“非进入者”并再次重新编译,这会导致延迟命中。JVMflags如下(我只加了-XX:+PrintCompilation-verbose:classtptroubleshoot,其他都是legacy):-Xms5g-Xmx5g-server-XX:+AggressiveHeap-XX:+UseFa

java - 当类路径中包含两个相同的 jar 时,JVM 是如何工作的

这是我同事的错误:有一个名为test.jar的jar,他修复了其中的一个错误。然后他重新编译代码并构建了一个名为testnew.jar的新jar问题是他将这两个jar放在类路径中的一个文件夹中。所以当程序运行时,行为是一团糟。我不知道发生了什么,但在删除test.jar之后,一切又好了。所以我想知道JVM的行为是什么。它是否使用它遇到的第一个jar中的类文件?或者是其他东西?谢谢。 最佳答案 是的,默认情况下它使用第一个jar中的类。这就是为什么你必须检查库目录是否有重复项。我和我的同事发生了很多次。

java - JVM 如何在加载类时验证没有潜在的操作数堆栈溢出?

通过一些介绍,我遇到了以下声明:当JVM加载一个类时,它可以分析其内容并确保操作数堆栈没有溢出或下溢。我找到了alotofsources提出相同的声明,但没有具体说明它是如何完成的。我不清楚如何使用静态分析进行此类验证。假设我有一个(恶意的)方法,它获取一些值作为参数,并使用它来执行一系列弹出操作。在加载时,迭代次数是未知的,因为它取决于方法调用者给出的参数。因此,在我看来,只有在运行时才能确定是否会出现下溢。我在这里缺少什么? 最佳答案 您可以在JavaVirtualMachinespecification中找到字节码valida

java - 有哪些 JVM 汇编程序?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我想要一个简单明了的JVM汇编程序。它应该采用用TheJavaVirtualMachineSpecification中描述的助记语言编写的文本文件。并生成类文件,即字节码。明确一点:我不想要一个可以从API调用生成类文件的库。JVM汇编

java - WeekFields 在 JVM 8 和 JVM 10 上的不同行为

我这里有非常简单的程序:publicstaticvoidmain(String[]args){LocalDateyear=LocalDate.ofYearDay(2022,100);System.out.println(year);System.out.println(WeekFields.of(Locale.GERMAN).weekOfYear());System.out.println(year.with(WeekFields.of(Locale.GERMAN).weekOfYear(),0));System.out.println(year.with(WeekFields.of(

java - 如何判断 JDK 在运行的 JVM 中是否可用?

注意:所有类似的问题都是从shell的角度回答这个问题(例如javac是否可用?java-version或whichjava).我正在明确地寻找当前正在运行的JVM的视角。有些程序需要从JDK的JRE中运行,而不仅仅是“JRE”。我想知道是否有一种简单的方法可以找出我的当前运行的程序是在什么程序中执行的。我正在寻找一种通用的方法来解决这个问题,而不是分析有问题的程序并复制它对JDK功能的使用。这就是为什么如果可能的话,如果javac在路径上,我宁愿不执行外部进程测试。我更愿意寻找一些可以在JDK中运行但在JRE中失败的代码。它可能是Class.forName,其中包含一个仅在JDK中可

java - JVM 线程转储位置

当我发出kill-3命令到我的Java程序,它会在控制台上生成线程转储。如何将其重定向到文件? 最佳答案 两种选择:使用重定向的stdout运行您的Java应用程序javacom.example.MyApp>out.txt改用jstack。jstack实用程序允许您获取线程转储并将输出发送到当前控制台而不是Java应用程序的标准输出,从而允许您对其进行重定向。例如,如果您的Java应用程序的PID是12345(使用jps实用程序可以快速找到它):jstack12345>threads.txt

java - 可以通过参数 "-d32"强制 64 位 JVM 使用 32 位模式吗?

所以我有一些第3方native库,它只能在32位JVM中跨windows、osx、linux工作,我需要始终强制java应用程序在32位JVM模式下运行。如果目标系统只安装了64位JVM,是否可以强制它以32位模式运行java应用程序? 最佳答案 没有。您指定的先决条件禁止(好吧,我排除了捆绑JVM解决方案和安装JVM解决方案)应用程序在32位JRE中运行。如果您想在32位JVM中运行您的应用程序,而您的第三方native库仅作为32位DLL可用,那么您必须使用32位JVM。64位JVM无法加载32位库;没有32位模式可以加载此类库