草庐IT

java - 什么是 JAVA_HOME? JVM如何找到存储在JAVA_HOME中的javac路径?

我想知道JAVA_HOME是什么。javac.exe和java.exe的路径在哪里设置。它在环境变量中吗?当我从命令提示符编译Java程序时,JVM是如何找到javac.exe的? 最佳答案 JVM没有找到java.exe。它甚至不叫它。java.exe由操作系统(在本例中为Windows)调用。JAVA_HOME只是一个约定,通常被Tomcat、其他JavaEE应用服务器和构建工具(如Gradle)用来查找Java所在的位置。从您的角度来看,重要的是Java/bin目录位于您的PATH上,因此Windows可以找到.exeJDK附

java - 为什么(Oracle)JVM 有一个固定的内存使用上限(-Xmx)?

本着提问的精神Java:WhydoesMaxPermSizeexist?,我想问一下为什么OracleJVM对其内存分配池的大小使用了一个固定的上限。默认为物理RAM的1/4(有上限和下限);因此,如果您有一个需要大量内存的应用程序,您必须手动更改限制(参数-Xmx),否则您的应用程序将表现不佳,甚至可能因OutOfMemoryError而崩溃。为什么这个固定的限制甚至存在?为什么JVM不像大多数操作系统上的本地程序那样按需分配内存?这将解决Java软件的一整类常见问题(只需Google看看网上有多少关于通过设置-Xmx解决问题的提示)。编辑:一些答案​​指出,这将保护系统的其余部分免

java - 尝试增加 jvm 内存时,您可以将 Xmx 设置为最大数量吗?

有最大值吗?您可以将Xmx设置为的大小?我将它设置为1024m并且Eclipse可以正常打开。当我将其设置为1024以上时,eclipse无法打开,并且出现错误“jvm已终止。退出代码=-1”...我这样做是因为我不断收到“java.lang.OutOfMemoryError:Javaheapspace”。我正在读取一个35.5Mb的.txt文件,当它只是使用“while((line=reader.readLine())!=null)”循环读取文件时会发生此错误。我原以为1024mb就足够了。谁能帮帮我? 最佳答案 是的,有一个最大

java - 为什么 JVM 参数以 "-D"开头?

为什么我们需要在JVM参数前加上-D例如从命令行运行jar时?例如java-jar-DmyProp="HelloWorld"myProgram.jar用于运行带有系统参数myProp的myProgram.jar。那么为什么是领先的-D?为什么Java的架构师不能让我们简单地做:java-jar-myProp="HelloWorld"myProgram.jar我希望得到的答案不仅仅是“因为它就是这样”。额外问题:为什么字母-D与任何其他字母不同,它代表什么?注意:此问题首先询问为什么需要使用“D”或任何其他字母。它不太关心选择特定字母“D”而不是任何其他字母,尽管这是一个额外的问题。奖金

java - 地址已在使用 : JVM_Bind java

每当我重新启动应用程序时,它建立在java支柱Mysql和Jboss4.05版本我收到错误,因为Addressalreadyinuse:JVM_Bind我知道的唯一解决方法是重新启动机器并重试,它会起作用。Else有时我会执行Ctrl-Alt-Del并停止所有与Java相关的进程,有时这也可以。但是具体的原因是什么?我们如何才能避免这个问题呢? 最佳答案 Addressalreadyinuse:JVM_Bind表示其他应用程序已经在监听您当前应用程序尝试绑定(bind)的端口。您需要做的是,更改当前应用程序的端口或更好;只需找出已经

java - -Xmn jvm 选项代表什么

我尝试在互联网上搜索有关-Xmn选项的信息,但没有成功。谁能解释一下这代表什么以及如何使用它来调整JVM? 最佳答案 来自here:-Xmn:thesizeoftheheapfortheyounggenerationYounggenerationrepresentsalltheobjectswhichhaveashortlifeoftime.Younggenerationobjectsareinaspecificlocationintotheheap,wherethegarbagecollectorwillpassoften.All

java - OpenJDK JVM 会把堆内存还给 Linux 吗?

我们有一个长期存在的服务器进程,它在短时间内很少需要大量RAM。我们看到,一旦JVM从操作系统获取了内存,它永远不会将其返回给操作系统。我们如何要求JVM将堆内存返回给操作系统?通常,此类问题的公认答案是使用-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio。(参见例如1、2、3、4)。但是我们是这样运行java的:java-Xmx4G-XX:MaxHeapFreeRatio=50-XX:MinHeapFreeRatio=30MemoryUsage在VisualVM中仍然可以看到:很明显,JVM不支持-XX:MaxHeapFreeRatio=50,因为h

java - 为什么JVM启动慢?

与其他运行时(如CPython)相比,究竟是什么让JVM(尤其是Sun的实现)运行缓慢?我的印象是,这主要与加载大量库有关,无论它们是否需要,但这似乎不需要10年的时间来解决。想一想,JVM启动时间与Windows上的CLR相比如何?Mono的CLR怎么样?更新:我特别关注Unix中常见的链接在一起的小型实用程序的用例。Java现在适合这种风格吗?无论Java产生什么启动开销,它是为每个Java进程加起来的,还是仅在第一个进程中真正体现出来? 最佳答案 这里是whatWikipediahastosayontheissue(附有一些引

java - 64 位 JVM 限制为 300GB 内存?

我正在尝试在可以为我提供高达1TBRAM空间的集群计算环境(运行CentOS6.2Final版的IBMLSF)上运行Java应用程序。我可以创建一个最大内存高达300GB(Xmx)的JVM,尽管我需要的不止这些(如果需要,我可以提供详细信息)。但是,使用Xmx选项创建最大内存超过300GB的JVM似乎是不可能的。更具体地说,我收到了经典的错误消息:ErroroccurredduringinitializationofVM.Couldnotreserveenoughspaceforobjectheap.我的(64位)JVM的详细信息如下:OpenJDKRuntimeEnvironment

java - 在运行时设置 JVM 堆大小

有没有办法从正在运行的Java程序中设置堆大小? 最佳答案 没有。对于堆要求非常多变的应用,您可以使用-Xmx将最大堆大小设置得非常高,并调整-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio以便应用程序在堆收缩时不会挂起大量内存(它使用默认设置执行此操作)。但请注意,当应用实际使用的内存变化剧烈且迅速时,这可能会导致性能问题-在这种情况下,您最好将其卡在所有内存上,而不是仅将其返回给操作系统一秒钟后再次申领。您可能还想摆弄GCoptions确保GC不会留下太多无人认领的对象,当堆有很大的增长空间时,