jjzjj

java - Java Atomics 是否只需要相对于 VM 的原子性

我查看了AtomicInteger类(找到here)的Java源代码,以了解实现JVM需要哪些原子原语。我注意到他们使用未记录的UnsafeAPI来实现他们的原子整数操作,他们使用的唯一两个原语似乎是compareandswap和compareandset操作。并且Unsafe类将这些指令实现为本地方法,这让我相信他们正在使用在一般情况下执行这些原始操作的本地指令。然而,并非每个处理器(尽管大多数现代处理器都有)都有一个原生支持这些原语的指令集。现在,即使没有native处理器支持,这些原语也可以由VM以保证与其他VM线程的原子性的方式实现,但不一定与其他native线程。那么java

java - 使用依赖于硬件的 VM 参数(重新)启动 Java 应用程序的正确方法?

编辑我不想使用JavaWebStart我有一个Java应用程序,我想使用不同的VM参数运行它,具体取决于启动它的系统所具有的内存量。例如,如果机器有1GB或更少的内存,如果它有2GB,我想传递“-Xmx200m”和“-Xmx400m”,如果它有8GB,我想传递“-Xmx800m”(这些只是示例).有没有可移植的方法来做到这一点?我试过第一个微型Java应用程序(因此可移植)确定可用内存量,然后启动一个新的Java应用程序,但我认为这不是很干净。截至目前,我已经编写了Bashshell脚本,这些脚本根据配置使用正确的参数调用Java应用程序,但它仅适用于OSX上的Linux。解决这个问题

Java VM 无法识别 -XX :G1YoungGenSize?

我在JDK1.7.0中使用G1垃圾收集器,但VM无法识别G1YoungGenSize选项。具体来说,当我运行时:java-XX:+UnlockExperimentalVMOptions-XX:+UseG1GC-XX:G1YoungGenSize=512m...我收到以下错误:UnrecognizedVMoption'G1YoungGenSize=512m'Error:CouldnotcreatetheJavaVirtualMachine.Error:Afatalexceptionhasoccurred.Programwillexit.我也尝试过在G1YoungGenSize之前加上一个

java - Dom4j selectNodes(arg) 不给出节点列表

我在Java中使用DOM4j处理XML,我的xml是这样的:...........然后,Listlist=document.selectNodes("/abcd/efg");获取列表零的大小。我觉得这是由于xml中指定的命名空间。我尝试了很多但没有成功。 最佳答案 XPath表达式中未加前缀的元素名称指的是不在命名空间中的元素-它们不考虑文档中声明的“默认”xmlns="..."命名空间。您需要在XPath引擎中为命名空间声明一个前缀,然后在表达式中使用该前缀。这是一个受theDOM4Jjavadocs启发的示例:Mapuris=n

java - Visual VM 中的 RMI TCP Accept、Attach Listener 和 Signal Dispatcher 是什么?

我正在使用VisualVM分析一个程序。我的程序运行了一段时间,最后使用XChart弹出了一些图。显示结果。图表显示后,我注意到VisualVM中有一些Activity线程“RMITCPAccept”、“AttachListener”和“SignalDispatcher”。这些线程是什么?我假设它们仅与VisualVM有关。我说的对吗?? 最佳答案 这篇文章粗略地回答了https://stackoverflow.com/a/7698906/573057如你所想;Attach、Signal和RMITCPAccept用于通过jConso

Java HotSpot(TM) 64 位服务器 VM 警告、CentOS、SmartGit、SmartSvn

在运行SmartGit提供的shell脚本时,JavaHotSpot(TM)64-BitServerVMwarning:Youhaveloadedlibrary/home/User/.smartgit/6/jna-tmp/com/sun/jna/linux-i386/libjnidispatch.sowhichmighthavedisabledstackguard.TheVMwilltrytofixthestackguardnow.It'shighlyrecommendedthatyoufixthelibrarywith'execstack-c',orlinkitwith'-znoex

java - args4j : in "usage" how to sort Options manually?

在args4j中,我定义了这样的选项:@Option(name="-host",usage="hosttoconnect")@Option(name="-port",usage="portofthehost")@Option(name="-idle",usage="idle")然而,当显示帮助时,args4j总是使用字母顺序,所以它会打印-host-hosttoconnect-idle-idle-port-porttoconnect这不太方便,因为我想先显示强制选项。此外,我想自己设置选项的顺序,因为一些选项(如主机和端口)应该放在一起。如何控制args4j中选项的顺序?我发现3年前问

java - 哪些 VM 或 GC 支持 JNI 固定?

GetArrayElements函数族被记录为复制数组或将它们固定到位(并且这样做可以防止压缩垃圾收集器移动它们)。它被记录为比GetPrimitiveArrayCritical更安全、限制更少的替代方案.但是,我想知道哪些VM和/或垃圾收集器(如果有的话)实际固定数组而不是复制它们。 最佳答案 较旧的IBMJVM已固定(1.4及更早版本-即:不是当前的IBMJ9JVM),但从那时起,它们就没有了。一般来说,JVM不喜欢固定,因为它确实会扰乱复制垃圾收集器,而这正是当今大多数生产JVM所做的事情。我不是100%最新的(即:最新的Ja

java - 避免 VM 启动时使用的类使用 lambda 和流

通过java.lang.module我在类文档中阅读了以下内容:@implNote...isusedatVMstartupandsodeliberatelyavoidsusinglambdaandstreamusagesincodepathsusedduringstartup.使用此处避免的lambda和流的原因是什么?它们可能产生的影响是什么?插图将有助于更好地理解,但不是在这里寻求意见。 最佳答案 不依赖lambda和流(广泛使用lambda)有助于避免在VMBootstrap中进行冗余工作。这反过来又减少了启动时间和内存占用。

java - IntelliJ 调试 : Suspend whole VM then step on single thread

我正在调试一个有很多线程的应用程序。我的断点设置为暂停整个VM。当线程遇到其中一个断点时,我想使用StepOver。但这似乎会恢复整个虚拟机,直到该步骤完成。如果我可以只步进遇到断点的单个线程,那将非常有帮助。在IntelliJ11.1/Java6中有什么方法可以做到这一点吗?(希望我没有遗漏一些明显的东西......) 最佳答案 此功能已在IntelliJ16中添加(他的回答中引用的CrazyCoder问题已解决)更多细节在这里:https://blog.jetbrains.com/idea/2016/02/intellij-id