草庐IT

java - 无法为对象堆保留足够的空间来启动 JVM

刚刚遇到奇怪的问题。当我输入时java-version我明白了ErroroccurredduringinitializationofVMCouldnotreserveenoughspaceforobjectheapCouldnotcreatetheJavavirtualmachine..java-Xms64m-Xmx64m-version这个命令很好用javaversion"1.6.0_24"Java(TM)SERuntimeEnvironment(build1.6.0_24-b07)JavaHotSpot(TM)ClientVM(build19.1-b02,mixedmode)如果我

java - 32/64位jvm上java原语的大小?

int的大小为32位,long/double的大小为64位。这些尺寸是否会保持不变32/64位JVM32/64位处理器如果是,那么long/double上的操作在64位处理器/JVM上是否是原子操作?OracleJavatutorialsays:Readsandwritesareatomicforreferencevariablesandformostprimitivevariables(alltypesexceptlonganddouble).这句话与jvm/处理器架构有什么关系吗?谁能解释一下。3.最后,如果我使用64位jvm和处理器,我将能够读/写双/长原子吗

Java堆在jvm内存内部还是外部?

直到今天我才知道java有堆,它是由JVM创建的。此外,此内存由操作系统分配给JVM实例,即堆驻留在JVM实例中。但是今天我看到了一张图片,这表明,JVM和堆相距甚远。所以,我现在很困惑,谁能告诉我,我之前是错的还是我无法理解图片? 最佳答案 关于这个问题有很多要讨论的。我一直很喜欢IBM的文章,因为它包含了非常好的信息。对于这个特定的问题,这里有一段摘录。来自ThenativeandJavaheapsarticleonIBM:TheJVMmaintainstwomemoryareas,theJava™heap,andthenati

java - 为什么/何时不想在 JVM 中启用 Java 8 UseStringDeduplication?

Java8引入了字符串重复数据删除,可以通过使用-XX:+UseStringDeduplication选项启动JVM来启用,允许通过引用类似的String对象而不是保留重复项来节省一些内存.当然,它的有效性因程序而异,具体取决于Strings的利用率,但我认为可以肯定地说,总的来说,它可以被认为对大多数应用程序(如果不是全部)有益,这让我想知道很少有事情:为什么默认不启用?是因为与重复数据删除相关的成本,还是仅仅因为G1GC仍然被认为是新的?是否存在(或可能存在)您不想使用重复数据删除的极端情况? 最佳答案 字符串去重可能有害的情况

java - 即使坏人试图捕获它,我如何在任何 OutOfMemoryException 上使 JVM 退出

OOME属于通常您不应该从中恢复的错误类别。但是如果它被埋在一个线程中,或者有人捕获了它,应用程序就有可能进入一个它没有退出但没有用的状态。即使面对使用可能愚蠢地trycatchThrowable或Error/OOME的库,如何防止这种情况的任何建议?(即您无权直接修改源代码) 最佳答案 解决方案:在较新的JVM上:-XX:+ExitOnOutOfMemoryErrortoexitonOOME,ortocrash:-XX:+CrashOnOutOfMemoryError在旧版本上:-XX:OnOutOfMemoryError=";"

java - 'main' 方法中的 JVM 指令 ALOAD_0 指向 'args' 而不是 'this' ?

我正在尝试实现Java的一个子集以进行学术研究。好吧,我正处于最后阶段(代码生成),我编写了一个相当简单的程序来查看如何处理方法参数:classMain{publicstaticvoidmain(String[]args){System.out.println(args.length);}}然后我构建它,并通过我在以下位置找到的在线反汇编程序运行“Main.class”:http://www.cs.cornell.edu/People/egs/kimera/disassembler.html我得到了“main”方法的以下实现:(反汇编输出在Jasmin中).methodpublicst

java - 如何在不停止 JVM 的情况下将 Javaagent 添加到 JVM?

我希望在不停止应用程序的情况下分析Java应用程序。我可以在应用程序运行时以某种方式添加Javaagent吗? 最佳答案 见StartingaJavaagentafterprogramstart.链接到http://dhruba.name/2010/02/07/creation-dynamic-loading-and-instrumentation-with-javaagents/在“运行时动态加载javaagent”下提供了工作示例:publicstaticvoidloadAgent()throwsException{String

java - 我如何干净地关闭嵌入式 JRuby 以响应 JVM 进程的 SIGTERM?

我正在使用org.jruby.embed.ScriptingContainerAPI在JVM进程内的JRuby上运行Middleman(使用Webrick)服务器。如果我完全关闭并从JVM内部停止服务器,一切都会按预期工作。但是,如果我向JVM进程发送SIGTERM(例如,通过在命令行中按ctrl+C),控制台会返回,但JVM进程不会终止——它会无限期地挂起,直到我向它发送SIGKILL。我尝试注册一个JVM关闭Hook来终止ScriptingContainer实例,但该Hook从未触发。我不知道为什么......也许JRuby正在以某种方式吞下SIGTERM?我怎样才能让JVM彻底关

java - JVM Tenured/Old gen 达到限制和服务器挂起

我们的应用程序需要非常大的内存,因为它处理非常大的数据。因此,我们将最大堆大小增加到12GB(-Xmx)。以下是环境详情OS-Linux2.6.18-164.11.1.el5JBoss-5.0.0.GAVMVersion-16.0-b13SunJVMJDK-1.6.0_18我们的QA和产品中有上述环境和配置。在QA中,我们将最大PSOldGen(堆内存)分配为8.67GB,而在Prod中仅为8GB。在特定作业的Prod中,旧代堆达到8GB,卡在那里并且WebURL变得无法访问。服务器正在停机。但在QA中,它也达到了8.67GB,但执行了完整的GC,它又回到了6.5GB或其他东西。在这里

java - JVM如何保证finally block 的执行?

这个问题的目的是JVM如何能够保证finallyblock的执行(前提是JVM没有崩溃并且线程没有中断或退出)。在一个面试问题的提示下,我试图了解JVM如何确保即使在奇怪的情况下也能执行finallyblock......请考虑以下代码:try{int[]someArray=newint[10];intinvalid=someArray[10];}catch(IndexOutOfBoundsExceptione){thrownewRuntimeException("OtherException");}finally{//closeopenfilesorHTTPconnectionset