标签: jvm-hotspot

以编程方式获取堆栈转储中Java监视器的地址?

如果你得到一个过程,如堆栈转储,通过jstack,你会得到关于锁定的监视器(和同步),一个地址为每个信息.例如,从一个简单的死锁双线程进程(使用jstack):

"Thread-0" prio=10 tid=0x00007f1444042000 nid=0x2818 waiting for monitor entry [0x00007f14433ca000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at scrap.DeadlockTest$Deadlocker.run(DeadlockTest.java:49)
    - waiting to lock <0x00000007c14e6378> (a java.lang.Object)
    - locked <0x00000007c14e6368> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:619)

... (omitted some lines here)

Java stack information for the threads listed above:
===================================================
"Thread-1":
    at scrap.DeadlockTest$Deadlocker.run(DeadlockTest.java:49)
    - waiting to lock <0x00000007c14e6368> (a java.lang.Object)
    - locked <0x00000007c14e6378> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:619)
"Thread-0":
    at scrap.DeadlockTest$Deadlocker.run(DeadlockTest.java:49)
    - waiting to lock <0x00000007c14e6378> (a java.lang.Object)
    - locked <0x00000007c14e6368> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)

有没有什么办法让,在Java代码运行时,上面显示的地址相同,如 …

java debugging concurrency stack-trace jvm-hotspot

5
推荐指数
1
解决办法
451
查看次数

为什么在我的字符串连接字节码中调用"String.valueOf(Object)"?

我在一个小的microbenchmark应用程序(运行JDK 1.6)中有以下两种方法:

public static String testStringBuilder3(String str1, String str2, String str3, String str4, String str5) {
    return new StringBuilder(str1).append("-").append(str2).append("-").append(str3).append("-").append(str4).append("-").append(str5).toString();
}

public static String testStringBuilder4(String str1, String str2, String str3, String str4, String str5) {
    return str1 + "-" + str2 + "-" + str3 + "-" + str4 + "-" + str5;
}
Run Code Online (Sandbox Code Playgroud)

我希望这两种方法的字节码是相同的.它们几乎完全相同,只有一点我不想理解.

这是第一种方法的字节码(我不能让StackOverflow正确格式化):

public static java.lang.String testStringBuilder3(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
Code:
  0:    new #164; //class java/lang/StringBuilder
  3:    dup
  4:    aload_0
  5:    invokespecial   #170; //Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
  8:    ldc …
Run Code Online (Sandbox Code Playgroud)

java bytecode jvm-hotspot

5
推荐指数
1
解决办法
1531
查看次数

为什么java代码缓存大小在增长?

我有这个基本程序,除了坐在那里等待输入之外什么都不做:

import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Basic {
    public static void main(String[] args) throws Exception{
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input;
            input=br.readLine();
        }catch(IOException io){
            io.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Basic
Run Code Online (Sandbox Code Playgroud)

我通过JConsole连接看到这个:

codecache增加

这只是因为核心java bytcode最初被编译?当进程没有做任何事情时,如何增加codecache?

当我有这个版本(使用Thread.sleep):

public class Basic {
    public static void main(String[] args) throws Exception{
        while(true) {
            Thread.sleep(5000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

codecache增加

那么......为什么会这样呢?

PS这是输出java -version:

java version "1.6.0_37"
Java(TM) SE Runtime Environment …
Run Code Online (Sandbox Code Playgroud)

java performance jvm-hotspot code-caching jvm-codecache

5
推荐指数
1
解决办法
3101
查看次数

带有JProfiler的轻量级异步采样分析器(AsyncGetCallTrace)

我最近阅读了Jeremy Manson(谷歌)的一篇博客文章,内容是关于如何使用更准确,更轻量级的异步采样分析器.它依赖于热点JVM中的"AsyncGetCallTrace"未记录方法来收集线程的堆栈跟踪.

http://jeremymanson.blogspot.fr/2013/07/lightweight-asynchronous-sampling.html

我对JProfiler社区的问题是:JProfiler在其当前的7.2.3版本中是否可以使用AsyncGetCallTrace?这个功能是否适用于JProfiler 8.0?

jprofiler jvm-hotspot

5
推荐指数
1
解决办法
1021
查看次数

使用Java获得当前JVM的实际RAM使用率

在HTOP中,您可以看到RES值(驻留大小),它显示了您的JVM进程实际占用的RAM量.

现在我想通过仅使用纯Java来获得该值.如果你告诉我这是不可能的,那也没关系.

让我解释一下我用htop显示RES值为887M的应用程序所做的所有尝试:

  1. 通过MemoryMXBean组合提交的HeapMemory和非Heapmemory给了我726M
  2. 添加所有ManagementFactory.getMemoryPoolMXBeans()的所有提交内存给了我737M
  3. runtime.totalMemory()给出了515M

任何想法我还能尝试什么?

java memory jvm jvm-hotspot

5
推荐指数
1
解决办法
1214
查看次数

识别Java jdwp Debugger Assigned(Ephemeral)端口

我使用以下JVM参数来启动主机调试程序的JVM.

-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=0
Run Code Online (Sandbox Code Playgroud)

请注意,我正在分配端口零,以便JVM向操作系统请求临时端口.这对我的用例至关重要,以确保JVM不会因为某些预定义端口的争用而无法启动.

结果我的JVM启动,并将以下日志条目输出到stdout:

Listening for transport dt_socket at address: XXXX
Run Code Online (Sandbox Code Playgroud)

我想找到一些方法来识别JVM内部或外部的调试端口,因此我可以将它记录在状态管理服务器中.

这个用例有哪些选择?我已经考虑了以下几点,但没什么乐趣:

  • JMX Connector - 使用JConsole连接到进程,找到一些详细说明使用哪个端口的MBean.但是,我找不到任何这样的MBean
  • RMI注册表 - 是否可以让调试代理自己注册RMI注册表?我没有找到任何可行的证据.
  • Java代理 - 指定可以拦截调试器某些方面并获取端口详细信息的JVM代理,再次没有证据支持这种想法的可行性.

java jvm jvm-hotspot

5
推荐指数
1
解决办法
1897
查看次数

为什么在JMH中缺少@GenerateMicroBenchmark以及它的替代品是什么?

我尝试用JMH创建基准测试,我发现所有教程都参考了@GenerateMicroBenchmark.

但我无法在jmh-core中找到它:1.11.3.

如果它被删除了,它的替代品是什么,以及在没有该注释的情况下创建基准测试的惯用方法是什么.

java jvm-hotspot jmh

5
推荐指数
1
解决办法
1402
查看次数

什么是jvm预分配例外?

我在那里看到对预先分配的JVM异常的引用: - http://www.oracle.com/technetwork/java/javase/relnotes-139183.html - http://dev.clojure.org/display/community/Project+创意+ 2016

但寻找我只看到有关丢失堆栈跟踪的信息.什么是JVM分配的异常?这似乎是一种优化.

它是如何工作的,它有什么权衡取舍?

java performance jvm jvm-hotspot

5
推荐指数
1
解决办法
1263
查看次数

Windows上JDK 8的默认-Xss值

甲骨文表示在Windows上

-Xsssize缺省值取决于虚拟内存

如何在给定的Oracle JVM 8中找出Java在Windows上分配的线程堆栈大小的值?

我已尝试从哪里找到Sun / Oracle JVM的默认XSS值的解决方案

但它只打印0。

java -XX:+PrintFlagsFinal -version
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

java -XX:+PrintFlagsFinal 应该打印实际的线程堆栈大小,而不是0。对我来说似乎是JVM bug。

我想调整JVM性能,并想知道为线程的堆栈分配了多少内存。它是为unix平台专门指定的。我无法为Windows获得此值,这很奇怪。

java jvm jvm-hotspot

5
推荐指数
2
解决办法
6759
查看次数

在Java中创建的OutOfMemoryError对象在哪里

OutOfMemoryError当堆没有足够的内存来创建新对象时,就会发生这种情况.如果堆没有足够的内存,则OutOfMemoryError创建对象的位置.我想了解这一点,请指教.

java jvm memory-management exception-handling jvm-hotspot

5
推荐指数
2
解决办法
176
查看次数