草庐IT

java - 大量内存泄漏导致堆大小在大约8秒内从大约64mb变为1.5gb。垃圾收集器有问题吗?

这是问题所在:如您所见,内存使用swift膨胀!我不得不向JVM添加参数以增加堆大小,以避免在弄清楚发生了什么时避免出现内存不足错误。不好!基本应用程序摘要(针对上下文)(最终)该应用程序将用于自动化的屏幕CV和模板匹配类型的东西。我希望获得尽可能高的帧速率来观看屏幕,并通过一系列独立的使用者线程来处理所有处理。我很快发现普通的Robot类在速度上确实很糟糕,因此我打开了源代码,消除了所有重复的工作并浪费了开销,然后将其重建为我自己的类FastRobot。类(class)代码:publicclassFastRobot{privateRectanglescreenRect;private

java - 通过将自己的应用程序类添加到 classes.jsa 来加速应用程序启动

为了加快JVM的启动时间,Sun开发人员认为最好在安装JVM期间为平台预编译标准运行时类。可以找到这些预编译的类,例如在:$JAVA_HOME\jre\bin\client\classes.jsa我的公司目前正在开发一个带有自己的JRE的Java独立应用程序,因此通过将我们自己的应用程序类也添加到此jsa文件中来加快我们的应用程序启动时间将是一个绝妙的选择。我不相信JSA文件是魔术创建的,所以:它是如何创建的?以及如何欺骗JVM合并我自己的类?编辑:我已经发现了以下内容:classes.jsa由命令创建java-Xshare:dump可以在$JAVA_HOME/jre/lib/clas

java - 通过将自己的应用程序类添加到 classes.jsa 来加速应用程序启动

为了加快JVM的启动时间,Sun开发人员认为最好在安装JVM期间为平台预编译标准运行时类。可以找到这些预编译的类,例如在:$JAVA_HOME\jre\bin\client\classes.jsa我的公司目前正在开发一个带有自己的JRE的Java独立应用程序,因此通过将我们自己的应用程序类也添加到此jsa文件中来加快我们的应用程序启动时间将是一个绝妙的选择。我不相信JSA文件是魔术创建的,所以:它是如何创建的?以及如何欺骗JVM合并我自己的类?编辑:我已经发现了以下内容:classes.jsa由命令创建java-Xshare:dump可以在$JAVA_HOME/jre/lib/clas

java - 即使堆等大小稳定,为什么Sun JVM仍继续消耗更多的RSS内存?

在过去的一年中,我在应用程序的Java堆使用方面取得了巨大的进步-减少了66%。为此,我一直在通过SNMP监视各种指标,例如Java堆大小,cpu,Java非堆等。最近,我一直在监视JVM有多少实际内存(RSS,驻留集),这让我有些惊讶。JVM消耗的实际内存似乎完全独立于我的应用程序堆大小,非堆,eden空间,线程数等。通过JavaSNMP测得的堆大小JavaHeapUsedGraphhttp://lanai.dietpizza.ch/images/jvm-heap-used.png实际内存,以KB为单位。(例如:1MBKB=1GB)JavaHeapUsedGraphhttp://la

java - 即使堆等大小稳定,为什么Sun JVM仍继续消耗更多的RSS内存?

在过去的一年中,我在应用程序的Java堆使用方面取得了巨大的进步-减少了66%。为此,我一直在通过SNMP监视各种指标,例如Java堆大小,cpu,Java非堆等。最近,我一直在监视JVM有多少实际内存(RSS,驻留集),这让我有些惊讶。JVM消耗的实际内存似乎完全独立于我的应用程序堆大小,非堆,eden空间,线程数等。通过JavaSNMP测得的堆大小JavaHeapUsedGraphhttp://lanai.dietpizza.ch/images/jvm-heap-used.png实际内存,以KB为单位。(例如:1MBKB=1GB)JavaHeapUsedGraphhttp://la

java - 为什么 Java 堆的最大大小是固定的?

它isnotpossible在VM启动后增加Java堆的最大大小。造成这种情况的技术原因是什么?垃圾收集算法是否依赖于使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止Java应用程序对系统上的其他应用程序执行DOS操作? 最佳答案 在Sun的JVM中,我知道,整个堆必须分配在一个连续的地址空间中。我想对于大堆值,在启动后添加到您的地址空间同时确保它保持连续是非常困难的。您可能需要在启动时获取它,或者根本不需要。因此,它是固定的。即使没有立即使用,整个堆的地址空间也会在启动时保留。如果它不能为您传递的-Xmx的值保留足

java - 为什么 Java 堆的最大大小是固定的?

它isnotpossible在VM启动后增加Java堆的最大大小。造成这种情况的技术原因是什么?垃圾收集算法是否依赖于使用固定数量的内存?还是出于安全原因,通过消耗所有可用内存来防止Java应用程序对系统上的其他应用程序执行DOS操作? 最佳答案 在Sun的JVM中,我知道,整个堆必须分配在一个连续的地址空间中。我想对于大堆值,在启动后添加到您的地址空间同时确保它保持连续是非常困难的。您可能需要在启动时获取它,或者根本不需要。因此,它是固定的。即使没有立即使用,整个堆的地址空间也会在启动时保留。如果它不能为您传递的-Xmx的值保留足

java - 使用 javac 和 javax.tools.JavaCompiler 有什么区别?

Maven编译器插件文档states:TheCompilerPluginisusedtocompilethesourcesofyourproject.Since3.0,thedefaultcompilerisjavax.tools.JavaCompiler(ifyouareusingjava1.6)andisusedtocompileJavasources.Ifyouwanttoforcethepluginusingjavac,youmustconfigurethepluginoptionforceJavacCompilerUse确实,当我们的构建中未指定forceJavacCompi

java - 使用 javac 和 javax.tools.JavaCompiler 有什么区别?

Maven编译器插件文档states:TheCompilerPluginisusedtocompilethesourcesofyourproject.Since3.0,thedefaultcompilerisjavax.tools.JavaCompiler(ifyouareusingjava1.6)andisusedtocompileJavasources.Ifyouwanttoforcethepluginusingjavac,youmustconfigurethepluginoptionforceJavacCompilerUse确实,当我们的构建中未指定forceJavacCompi

java - Java VM EXCEPTION_ACCESS_VIOLATION 的可能原因?

当JavaVM因EXCEPTION_ACCESS_VIOLATION崩溃并生成hs_err_pidXXX.log文件时,这表明什么?错误本身基本上是一个空指针异常。它总是由JVM中的错误引起的,还是有其他原因,例如硬件或软件冲突故障?编辑:有一个原生组件,这是一个win32上的SWT应用程序。 最佳答案 大多数情况下,这是VM中的错误。但它可能由任何native代码(例如JNI调用)引起。hs_err_pidXXX.log文件应包含有关问题发生位置的一些信息。您还可以检查文件中的“堆”部分。许多VM错误是由垃圾收集引起的(尤其是在较