Tag: jvm

调用本机代码时JVM是否会停止?

从Java的字节码调用机器代码时是否有任何性能影响? 由于机器代码是“非托管”的,并且它没有“意识到”Java的内部结构,这可能导致JVM的内部调度程序暂停或类似的东西? 我是Java的新手,所以也许这甚至不相关,请帮忙。 我知道在Erlang中他们遇到了这个问题,VM在调用机器代码时基本停止了。 我希望Java不是这种情况。 是吗?

HTTPS nonProxyHosts的JVM参数

所以我为_JAVA_OPTIONS提供了一个相当负载的env变量 export _JAVA_OPTIONS=”-Dhttp.proxyHost=my-proxy.com -Dhttp.proxyPort=1080 -Dhttps.proxyHost=my-proxy.com -Dhttps.proxyPort=1080 -DsocksProxyHost=my-socks-proxy.com -Dhttp.nonProxyHosts=\”localhost|127.0.0.1|*.local|*.my-co.com\”” 但是当我使用Apache HTTP客户端API从Scala代码尝试时,我无法忽略内部服务器URL。 https://username:pwd@server.my-co.com/foo/bar 我是否需要为HTTPS指定不同的nonProxyHosts ? 文档没有指定这样的参数。 我错过了什么? 我在Mac上。

JVM进程大小和内存堆大小之间的巨大差异

我正在Windows 8.1 64bit上开发java swing应用程序,带有4GB RAM, JDK版本为8u20 64bit。 问题是当我使用带有Monitor选项的Netbeans Profiler启动应用程序时。 加载第一个Jframe时,应用程序内存堆约为18mb ,JVM进程大小约为50mb(image1) 。 然后当我启动包含带有webView的JFxPanel的其他Jframe时,Heap跳转到45mb并且JVM 进程 非常快地跳到700mb(image2) ,这非常令人困惑。 然后当我关闭第二个JFrame并且它被释放并且调用System.gc()并且JVM执行GC(在大多数情况下)时,堆降低到大约20mb,但JVM进程从不丢弃(image3) 。 为什么内存堆(45 Mb)和JVM进程(699 Mb)之间存在巨大差异? 为什么JVM需要所有内存? 以及如何减少这个数额? 我正在使用这些vm选项启动应用程序: -Xms10m -Xmx60m -Xss192k -XX:+UseG1GC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:PermSize=20m -XX:MaxPermSize=32m 编辑: –我刚刚阅读了该链接JVM内存使用失控的问题,他有同样的问题,但情况不同,他的堆大小是整个JVM进程内存大小的33%,在我的情况下小于7 %,他同时做多个工作(Tomcat webapp),我没有(java swing应用程序),他没有使用我所做的相同VM参数启动他的应用程序。 更新: –在第一个JFrame启动后(image1) 第二个JFrame启动后(image2) 第二个JFrame关闭后(image3) 编辑2: –我刚刚使用上面相同的VM参数尝试了相同的应用程序并添加了 -client -XX:+UseCompressedOops 并使用了JDK 8u25 32位,因为如本答案https://stackoverflow.com/a/15471505/4231826中所述,64位版本不包含JRE中的客户端文件夹,并将忽略-client参数。 结果是,当第二个JFrame打开时,总内存进程跳转到540Mb ,并且堆大小(在三个点中)与64位版本中的数量几乎相同,这是否证实这是一个与问题相关的问题到JVM(相同的堆大小和总进程大小的260Mb差异)?

如何在过度的GC中加快OOM?

偶尔我的JVM会耗尽内存,而不是OOMing我可以从中恢复(或者是dumpDumpOnOOM和调试),它会在GC丢失几个小时后才会丢失内存。 这与(未答复的)问题基本相同: 如何配置Java GC Overhead Limit? 但我怀疑答案是你不能调整98%/ 2%的阈值,所以我要求任何方式达到类似的效果。 注意过多的GC,最好导致OOM,或者杀死JVM等。

字符串池是在PermGen区域或Heap的Object区域中创建的

这是作者说的 3)字符串池是在Heap的PermGen区域中创建的,垃圾收集可以在perm空间中进行,但依赖于JVM到JVM。 顺便提一下,从JDK 1.7更新,String池被移动到创建对象的堆区域。 它有什么具体原因吗? 我无法在网上找到任何内容。 有什么影响?

Jmap堆转储,是否包括年轻一代?

快问 jmap堆转储是仅包含旧代,还是年轻代? 很长的解释 我有2个堆转储( jmap -heap:format=b 9999 ): 我的一台服务器没有加载(没有HTTP请求) 一个工作50%CPU,高负载(基准测试) 现在,第一个转储显示的堆大小比第二个大 (我认为这很奇怪)。 可能是因为Young Generation(高负载)经常变化,因为垃圾收集器经常运行(是的,JVM几乎已满)? 老一代人满99%,我注意到年轻一代的空间使用量差异很大。 因此,这意味着我在GC完成工作后立即进行了第二次转储,这就是为什么它的尺寸更小。 我对吗 ? 附加信息 : Java args: -XX:+UseParallelGC -XX:+AggressiveHeap -Xms2048m -Xmx4096m -XX:NewSize=64m -XX:PermSize=64m -XX:MaxPermSize=512m

Java:JVM可用的核心?

在Java中,方法Runtime.getRuntime().availableProcessors()具有以下Javadoc: 返回Java虚拟机可用的处理器数。 在特定的虚拟机调用期间,此值可能会更改。 价值如何实际改变? 在什么情况下,JVM可用的处理器比物理安装的处理器少? 乔纳斯

我该如何诊断和防止JVM崩溃?

当我遇到JVM崩溃时,我应该做什么(作为一个对JVM内部不了解的Java程序员)呢? 特别是,您将如何生成可重现的测试用例? 我应该在Sun(或IBM)的bug数据库中搜索什么? 我可以从生成的日志文件中获得哪些信息(例如hs_err_pidXYZ.log )?

Java 8元空间垃圾收集

我正在运行的java进程在运行的第一个小时左右执行得很好。 但是,性能会迅速降低。 在进行性能分析时,我发现元空间垃圾收集经常发生,直到小时标记然后失控: 我很确定我能够使用-XX:MaxMetaspaceSize选项来解决这个问题。 但是,我想更多地了解为什么会出现这种情况。 我无法想象为什么垃圾收集算法的行为会像这样。 有没有人对更好的解决方案有解释或建议? 谢谢

强制applet加载到同一个JVM实例中?

我接管了一个旧的Web应用程序的维护,该应用程序使用嵌入在同一网页中的多个applet。 这曾经很好用,但自从引入了Next Generation Java插件(~1.6.0_10)以来,不能保证各个applet加载到同一个JVM实例中。 如果它们加载到不同的JVM中,则它们无法通过AppletContext.getApplets()或通过静态变量进行通信。 有什么办法可以强制applet加载到同一个JVM实例中吗? 我看到了一个解决方法,其中指定相同的’java_arguments’参数可能会鼓励Java插件在同一个JVM实例中运行applet,但这对我们的应用程序不起作用(并且在任何情况下都不受Oracle正式支持,因此可能会消失无论如何)。 我们还尝试用间接applet到JavaScript到applet的通信替换直接applet到applet的通信,但我们不能使用这种方法,因为我们的客户端使用旧的Web浏览器版本来防止这种情况发生。 如果可能的话,我会热衷于避免通过非本地服务器路由所有本地applet-to-applet通信。