草庐IT

Java:VM 如何在 32 位处理器上处理 64 位 `long`

JVM如何在32位处理器上处理原始的“long”,即64位?能否在多核32位机器上并行使用多核?32位机器上的64位操作要慢多少? 最佳答案 它可能使用多个核心来运行不同的线程,但它不会并行使用它们进行64位计算。64位长基本上存储为两个32位整数。为了添加它们,需要进行两次添加,以跟踪进位位。乘法有点像将两个两位数相乘,只是每个数字都以2^32为底,而不是以10为底。其他算术运算也是如此。关于速度的编辑:我只能猜测速度差异。加法需要两次加法而不是一次,乘法(我认为)需要四次乘法而不是一次。但是,我怀疑如果所有内容都可以保存在寄存器

java - 启动时出现速度错误 "VM_global_library.vm"

我正在将Velocity与Spring结合使用。但是在Eclipse控制台中我得到了这个错误。我的代码工作正常,但我想知道如何修复它。ResourceManager:无法在任何资源加载器中找到资源“VM_global_library.vm”。 最佳答案 看起来这是一条无害的消息。来自VelocityDocumentation,如果此文件存在,Velocity将其加载为全局宏的位置。我相信您可以通过重置或覆盖以下属性的值来覆盖行为。velocimacro.library= 关于java-启

java - Java 8 流中的 arg 最大值?

根据产生double或整型值的标准的最大化,我经常需要集合的最大元素。Streams有max()函数,它需要我实现一个比较器,我觉得这很麻烦。有没有更简洁的语法,比如下面例子中的names.stream().argmax(String::length)?importjava.util.Arrays;importjava.util.Comparator;importjava.util.List;publicclassArgMax{publicstaticvoidmain(String[]args){Listnames=Arrays.asList("John","Joe","Marilyn

java - Eclipse 在 Debug模式下启动时显示无法连接到 VM 错误

当我在Debug模式下打开任何程序时,Eclipse显示无法连接到VM错误。这是异常堆栈java.net.SocketException:socketclosedatjava.net.PlainSocketImpl.socketAccept(NativeMethod)//IdontknowwhichsocketisclosedinmyPCatjava.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)atjava.net.ServerSocket.implAccept(ServerSocket.java:453)atjava.net

java - 拥有 fork 的 Java VM 意味着什么?

我有时会在运行JUnit测试时遇到此错误。我并不是在问错误是什么。我只想知道JavaVMfork时的含义? 最佳答案 “forkVM”不是错误(尽管您遇到的错误可能与其相关)。一些涉及编译和测试各个方面的工具(例如Maven)是用Java编写的,并使用JVM自行运行。如果您在不forkVM的情况下为您的应用程序运行单元测试,Maven将在与Maven运行相同的VM中运行这些测试。因此,它可能会受到某些VM范围设置(例如某些系统属性)的影响。为了避免Maven带来的副作用,可以在fork的VM中运行测试,也就是说,在作为操作系统中不同

java - Java VM 何时尝试加载类依赖项?

我遇到了一个我不明白的类加载器问题。我在使用Java1.6.0的OSX和WindowsXP上看到了相同的行为。当我使用不在类路径中的MyListener和MyObject运行以下代码时,我得到一个NoClassDefFoundError。但是,如果我删除MyObject.add(my)行或将其替换为MyObject.add(null),则代码运行正常。请注意,具有无法解析的依赖项的方法从未实际使用过。我不明白为什么MyObject.add(my)会导致VM尝试加载MyListener但MyListenermy=newMyListener(){};没有。publicclassMain{p

Nuget-带有新CSPROJ的命令行args(包括用于调试的符号)

在另一个项目中使用时,我希望能够调试我的Nuget软件包之一。过去,我在运行nuget.exe时会添加“-sym”,但是我目前正在使用新的CSPROJ(因此包装是构建的一部分),并且希望能够做同样的事情。任何人都知道,现在nuget.exe是构建过程的一部分,我如何有效地做到这一点。看答案构建任务尊重MSBUILD属性IncludeSymbols和IncludeSource用于包括符号和源。他们在打电话时设置dotnetpack和--include-symbols和/或--include-source。对于MSBUILD的调用,您会像/p:IncludeSymbols=true.如果您依靠“构

java - 我可以设置 Java VM 可用的线程/CPU 数量吗?

我想限制JavaVM可用的线程/进程数,类似于您设置可用内存的方式。我希望能够将其指定为仅使用1个线程或任意数量。注意:我无法在代码中设置它,因为我想限制的代码是一个我无法修改源代码的库。所以这肯定是对虚拟机的级别强加的硬上限。(或者,如果您可以对可以覆盖库的应用程序本身施加线程限制?)注意2:此目的是性能测试,以限制我要测试的库,以查看当它访问不同数量的CPU/线程时它的性能如何。谢谢! 最佳答案 JVM中的CPU限制问题在Java10中得到解决,并从build8u191向后移植到Java8:-XX:ActiveProcessor

java - "VM Periodic Task Thread"是什么?

我可以在我的线程转储中看到这个线程:"VMPeriodicTaskThread"prio=10tid=0x00007fc23000e800nid=0x49e6waitingoncondition这是什么? 最佳答案 查看最新的OpenJDK源代码,这是C++级别的线程,它在没有native定时器中断的系统上执行许多任务。它似乎主要用于采样/分析JVM正在做什么。 关于java-"VMPeriodicTaskThread"是什么?,我们在StackOverflow上找到一个类似的问题:

java - java.exe 程序是实际的 VM 吗?

这个问题在这里已经有了答案:TotallyConfusedwithjava.exe(3个答案)关闭8年前。JDK自带java.exe(forwindows)程序。您可以使用它从命令行启动程序。维基百科说它是“类加载器”和“类文件的解释器”。这是真正成熟的JVM吗?它是“更小、更轻量级”的JVM吗?还是别的?