草庐IT

JVM_AllocateNewObject

全部标签

java - JVM OutOfMemory 错误 "death spiral"(不是内存泄漏)

我们最近将许多应用程序从在RedHatlinuxJDK1.6.0_03下运行的迁移到Solaris10u8JDK1.6.0_16(更高规范的机器),我们注意到一个似乎相当紧迫的问题:在某些负载下我们的JVM让自己陷入“死亡螺旋”并最终耗尽内存。注意事项:这不是内存泄漏的情况。这些应用程序运行良好(在一种情况下运行了3年以上),内存不足错误在任何情况下都不确定。应用程序有时工作,有时不工作这不是我们迁移到64位VM-我们仍在运行32位在一种情况下,在1.6.0_18上使用最新的G1垃圾收集器似乎已经解决了这个问题。另一方面,回到1.6.0_03已经奏效有时我们的应用会因HotSpotSI

java - 为什么 JVM 允许为 IntegerCache 设置 "high"值,但不允许设置 "low"?

我们都知道,Java对[-128,127]范围内的数字(被认为是“常用”。缓存设计如下:privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//highvaluemaybeconfiguredbypropertyinth=127;StringintegerCacheHighPropValue=sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");i

java - 为什么 JVM 允许为 IntegerCache 设置 "high"值,但不允许设置 "low"?

我们都知道,Java对[-128,127]范围内的数字(被认为是“常用”。缓存设计如下:privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//highvaluemaybeconfiguredbypropertyinth=127;StringintegerCacheHighPropValue=sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");i

Java - 如何仅使用 JVM Config 为某些协议(protocol)禁用 TLS 密码?

我已经看到很多在java中使用jdk.tls.disabledAlgorithms禁用TLS密码的示例,例如:jdk.tls.disabledAlgorithms=MD2,RSAkeySize但我如何才能使用jdk.tls.disabledAlgorithms或类似的配置仅对某些协议(protocol)禁用密码?例如,如何仅对TLSv1.1禁用TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256?好像不支持opensssl这样的方式,是这样的:TLSv1.1:!TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256它不会导致任何错误,但密码仍然

Java - 如何仅使用 JVM Config 为某些协议(protocol)禁用 TLS 密码?

我已经看到很多在java中使用jdk.tls.disabledAlgorithms禁用TLS密码的示例,例如:jdk.tls.disabledAlgorithms=MD2,RSAkeySize但我如何才能使用jdk.tls.disabledAlgorithms或类似的配置仅对某些协议(protocol)禁用密码?例如,如何仅对TLSv1.1禁用TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256?好像不支持opensssl这样的方式,是这样的:TLSv1.1:!TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256它不会导致任何错误,但密码仍然

java - JVM-XX :+StringCache argument?

我最近阅读了有关JRE6[JavaVMOptions中可用的所有JVM参数的信息。]并看到了这个:-XX:+StringCache:Enablescachingofcommonlyallocatedstrings.现在我的印象是Java保留了一个实习(正确的词?)字符串池,并且在使用文字进行字符串连接之类的操作时,它不是创建新对象,而是将它们从该池中拉出。有没有人使用过这个论点,或者可以解释为什么需要它?编辑:我尝试运行基准测试,看看这个参数是否有任何影响,并且无法让SunJVM识别它。这是与:javaversion"1.6.0_11"Java(TM)SERuntimeEnvironm

java - JVM-XX :+StringCache argument?

我最近阅读了有关JRE6[JavaVMOptions中可用的所有JVM参数的信息。]并看到了这个:-XX:+StringCache:Enablescachingofcommonlyallocatedstrings.现在我的印象是Java保留了一个实习(正确的词?)字符串池,并且在使用文字进行字符串连接之类的操作时,它不是创建新对象,而是将它们从该池中拉出。有没有人使用过这个论点,或者可以解释为什么需要它?编辑:我尝试运行基准测试,看看这个参数是否有任何影响,并且无法让SunJVM识别它。这是与:javaversion"1.6.0_11"Java(TM)SERuntimeEnvironm

java - JVM 进程与 JVM 堆内存使用情况

我已通读ProcessMemoryVsHeap--JVM我也有同样的问题。jvm进程的内存使用量一直在增加,并且从不缩小。我通过在linux服务器上做一个顶部检查。应用程序正在将作业调度到集群(使用Quartz+SunJavaDRMAAAPI)java堆空间在应用程序生命周期内保持在限制范围内,但jvm进程显示内存使用量稳步攀升,并且从未下降。这是内存泄漏吗?如果是这样,为什么堆空间在限制范围内。谁能解释一下。更新:当我通过jconsole跟踪时,我有-Xmx1600m-Xms1600m我可以看到堆空间很好地在这个限制内450m但顶部命令显示进程使用超过900m。

java - JVM 进程与 JVM 堆内存使用情况

我已通读ProcessMemoryVsHeap--JVM我也有同样的问题。jvm进程的内存使用量一直在增加,并且从不缩小。我通过在linux服务器上做一个顶部检查。应用程序正在将作业调度到集群(使用Quartz+SunJavaDRMAAAPI)java堆空间在应用程序生命周期内保持在限制范围内,但jvm进程显示内存使用量稳步攀升,并且从未下降。这是内存泄漏吗?如果是这样,为什么堆空间在限制范围内。谁能解释一下。更新:当我通过jconsole跟踪时,我有-Xmx1600m-Xms1600m我可以看到堆空间很好地在这个限制内450m但顶部命令显示进程使用超过900m。

java - 如果我在调用 JVM 时多次指定系统属性,使用哪个值?

如果我在调用JVM时多次指定系统属性,当我检索该属性时,我实际会得到哪个值?例如java-Dprop=A-Dprop=B-jarmy.jar当我调用System.getProperty("prop");会有什么结果?Javadocumentation在这方面并没有真正告诉我任何有用的东西。在我对几台运行不同JVM的机器进行的非科学测试中,最后一个值似乎是返回的值(这实际上是我需要的行为),但我想知道这种行为是否实际上是在任何地方正式定义的,或者可以JVM之间的差异? 最佳答案 没有什么比编写一个小类来看看它是如何工作的更好的了。pu