草庐IT

java - 'expensive'是如何在运行的JVM上执行jstack的?

我正在考虑编写一个脚本来每分钟(或每五分钟)运行一次针对生产环境中正在运行的JVM运行jstack解析jstack输出并汇总我感兴趣的内容通过在另一台服务器上的集中式Cacti安装导出24/365图表的结果但是对于正在运行的JVM上的jstack有多昂贵或侵入性,我一无所知。在正在运行的JVM上执行jstack的开销有多大?我是否正在为一个受伤的世界做好准备? 最佳答案 我知道这个答案迟到了,但jstack的昂贵部分来自附加到调试器接口(interface),通常不会生成具有重要异常的堆栈跟踪(并且堆大小根本不重要):可以仅在安全点

java - 现代 JVM 是否优化了简单的内联匿名类分配?

我今天收到一个代码审查评论,将这个匿名类提取到一个字段中,以避免一遍又一遍地分配它:Collections.transform(newFunction(){Barapply(Foofoo){//dosomesimplelocaltransformoffoointoaBar.}});我回答说“没关系,JVM优化了”。虽然我确实知道这种“优化”不会以任何方式影响性能,而且我认为代码可内联访问的附加值是值得的,但我很好奇我对JVM优化的看法是否正确。所以,我的问题是-提议的重构绝对是空操作,因为JVM无论如何都会对其进行优化,或者这里是否存在一些微小的理论性能增益?

java - Tomcat 中 System.setProperty 的范围

这个问题是thisoneinvolvingAndroid的“表弟”.但这里我们在Tomcat环境。如果在我的网络应用程序中我使用System.setProperty("property_name","property_value");设置了一个属性,它将应用于哪个范围?这台机器上的所有JVM所有Tomcat网络应用仅执行指令的webapp只有执行指令的线程别的……非常感谢! 最佳答案 系统属性具有JVM作用域。因此,该属性将在整个tomcatJVM中针对所有Web应用程序和Tomcat本身进行修改(并可用)。请注意,系统属性存储在内

java - 在应用程序中记录 GC 信息

有没有办法将垃圾收集信息(例如-XX:+PrintGCDetails或-verbose:gc的输出)转发到Java中的记录器应用程序(在我的例子中是sl4j+logback)? 最佳答案 这些消息是由JVMnative进程生成的,而不是来自Java代码,因此您可以使用-Xloggc将输出重定向到文件(无旋转)Howtoredirectverbosegarbagecollectionoutputtoafile?直接通过管道传输标准输出(多个旋转选项)Logrotationofstdout?Rollinggarbagecollector

java - 可终结对象的前期成本是多少?

Java中可终结对象的讨论通常会讨论当可终结对象(及其相关资源)无法快速被垃圾回收时发生的常见间接成本。目前,我更感兴趣的是,在内存方面和对象分配时间方面,最终化的实际直接成本是多少。我在很多地方看到过对这种成本存在的间接引用,例如Oracle'sarticleonfinalizationmemoryretentionissues备注:Whenobjisallocated,theJVMinternallyrecordsthatobjisfinalizable.ThistypicallyslowsdowntheotherwisefastallocationpaththatmodernJV

java - 包括使用 Gradle 构建的 Java 库会抛出 NoClassDefFoundError

我正在编写一个Java库,我想使用Gradle构建该库,然后从本地测试项目对其进行测试。我更愿意使用Gradle3.3来实现我的目标。该库应该为Java5及更高版本构建。到目前为止,我的build.gradle看起来像这样:plugins{id'jvm-component'id'java-lang'}repositories{mavenCentral()}model{components{main(JvmLibrarySpec){sources{java{dependencies{module'commons-codec:commons-codec:1.10'module'org.ap

java - 比较 Collectors.summingLong 和 Collectors.counting 的性能

基准测试在intelcorei5,Ubuntu下运行javaversion"1.8.0_144"Java(TM)SERuntimeEnvironment(build1.8.0_144-b01)JavaHotSpot(TM)64-BitServerVM(build25.144-b01,mixedmode)我正在比较Collectors.counting和Collectors.summingLong(x->1L)的性能。这是基准:publicListints=newArrayList();Collectorcounting=Collectors.counting();Collectorsu

java - 如何检测String.substring是否复制字符数据

我知道对于OracleJava1.7update6和更新版本,当使用String.substring时,String的内部字符数组被复制,对于旧版本,它是共享的。但是我发现没有官方API可以告诉我当前的行为。用例我的用例是:在解析器中,我喜欢检测String.substring是否复制或共享底层字符数组。问题是,如果字符数组是共享的,那么我的解析器需要使用newString(s)显式“取消共享”以避免内存问题。但是,如果String.substring无论如何都会复制数据,那么这就没有必要了,并且可以避免在解析器中显式复制数据。用例://possiblythequeryisveryve

java - -XstartOnFirstThread VM 参数的作用/含义是什么?

我找不到VM参数-XstartOnFirstThread的文档。我似乎有必要在我的Mac上通过LWJGL运行JOGL。这是什么意思?似乎是某个进程想要线程0。这是正确的吗?请注意:我的主类中有一个run()方法。它似乎没有覆盖任何东西,我也没有实现可运行。我在这里运行的示例源代码:http://www.lwjgl.org/guide 最佳答案 从Java1.7.0_u4开始,此选项记录在MacOSX平台上的java-X中。该选项导致JVM使用线程0启动应用程序。显然,这是让MacOSX正确运行SWT和GWT应用程序所必需的。根据Ec

java - 为什么 JVM 在繁忙的自旋暂停后显示相同代码块的更多延迟?

下面的代码演示了问题明确,即:Theexactsameblockofcodebecomesslowerafterabusyspinpause.请注意,我当然没有使用Thread.sleep.另请注意,没有条件导致HotSpot/JIT去优化,因为我正在使用数学运算而不是IF更改暂停。.有一个我想要计时的数学运算block。首先,我在开始测量之前对block暂停1纳秒进行计时。我这样做了20,000次。然后我将暂停从1纳秒更改为5秒,并像往常一样继续测量延迟。我这样做了15次。然后我打印最后30个测量值,因此您可以看到15个测量值的暂停时间为1纳秒,以及15个测量值的暂停时间为5秒。正如