标签: jvm-hotspot

代理 JAR 已加载但代理未能初始化

我正在尝试使用代理“注入”一个 jar,现在 Java 版本都是 1.8,并且工具来自我的 JDK lib 文件夹,所以我认为这也没有任何问题

这是我的加载类

public static void main(final String[] args) throws Exception {
    final File jarFile = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
    System.out.println("Starting Lizard...");
    try {
        Class.forName("com.sun.tools.attach.VirtualMachine");
    }
    catch (ClassNotFoundException e2) {
        System.out.println("ERROR: Couldn't load VirtualMachine class, is tools.jar present?");
        return;
    }
    System.out.println("Loading attach library...");
    extractLibrary(jarFile);
    try {
        System.loadLibrary("attach");
    }
    catch (Exception e3) {
        System.out.println("ERROR: Couldn't load attach libary!");
        return;
    }

    System.out.println("Attach library loaded.");
    System.out.println("Searching for Minecraft JVM...");
    for (final VirtualMachineDescriptor descriptor : VirtualMachine.list()) {
        if (descriptor.displayName().startsWith("net.minecraft.launchwrapper.Launch")) { …
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-hotspot

2
推荐指数
1
解决办法
5224
查看次数

如果 JVMTI 不是,Java 的 JDI 跨平台如何?

所以Java的调试接口是使用JVMTI作为后端的....但是JVMTI需要在目标架构上编译,那么这些JDI使用的JVMTI函数是不是预先编译好并作为库随JDK一起提供的呢?这意味着我可以在不使用 JDI 的情况下使用那些预编译库……是吗?我假设只有少数函数已经编译,但如果我需要这些函数,那么我不需要自己编译它们的麻烦......

java jvm jvm-hotspot jdi jvmti

2
推荐指数
1
解决办法
55
查看次数

优化循环内对象的创建

在Java 6 HotSpot VM上,以下哪一项更优化?

final Map<Foo,Bar> map = new HashMap<Foo,Bar>(someNotSoLargeNumber);    
for (int i = 0; i < someLargeNumber; i++)
{
  doSomethingWithMap(map);
  map.clear();
}
Run Code Online (Sandbox Code Playgroud)

要么

final int someNotSoLargeNumber = ...;
for (int i = 0; i < someLargeNumber; i++)
{
  final Map<Foo,Bar> map = new HashMap<Foo,Bar>(someNotSoLargeNumber);      
  doSomethingWithMap(map);
}
Run Code Online (Sandbox Code Playgroud)

我认为他们对意图都很清楚,所以我不认为风格/增加复杂性是一个问题.

直觉看起来第一个会更好,因为只有一个'新'.但是,如果不保留对地图的引用,HotSpot是否能够确定为每个循环创建相同大小的映射(内部为Entry [someNotSoLargeNumber]),然后使用相同的内存块(即不做了很多内存分配,只是将调零比调用每个循环的clear()更快?

一个可接受的答案是指向文档的链接,该文档描述了HotSpot VM实际可以实现的不同类型的优化,以及如何编写代码来协助HotSpot(而不是手动优化代码的天真魅力).

java optimization jvm-hotspot

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

Java标准库如何与本机代码通信?

他们使用像Mono的PInvoke这样的东西吗?或者更像是在运行时启动之前注册的内部调用?java有一个基本库来处理像mscorlib.dll这样的本机调用吗?如果我想在C代码中调用JVM,它库是否会查找.so/.dll文件?如果我静态链接所有JRE本机库,它会对Java标准库产生影响吗?

java java-native-interface jvm jvm-hotspot

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

Java中的按位AND(&)表达式

我正在调试expr1 & expr2其中expr1具有影响expr2评估结果的副作用的代码.我怀疑expr2之前会进行评估expr1,因为JLS保证从左到右的评估&&,但不一定是&.我还怀疑评估顺序的更改可能是HotSpot执行优化的结果(我们正在运行Java 6u20).你知道HotSpot能否进行这样的优化吗?更好的是,提供支持或消除怀疑的文档的任何指针.提前致谢.

编辑:感谢那些建议重写代码,因为它既正确又可读 - 你是对的,但我已经做了,所以这不是我想要的.不幸的是,很难测试这个变化,这就是我在这里提出问题的原因.

java jvm-hotspot bitwise-operators short-circuiting

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

scala的actor模型如何利用C线程和本机系统线程?

scala的actor模型如何利用C线程和本机系统线程?我知道编译器是可插入的,所以scala编译器取代了java编译器.我对下一步感到困惑,不是代码的中间表示只是被热点优化(可能不如基于线程的模型有效)并且转换为基于线程的机器代码和C的组合.

java multithreading scala jvm-hotspot

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

分析gc日志

我正在使用-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime选项打开gc日志记录.

但发现只有PrintGCApplicationStoppedTime经过-XX:+PrintGCDetails命令打印的gc日志的4 0r 5打印后我的实际细节!

根据定义,PrintGCApplicationStoppedTime打印应用程序停止每个gc的时间.

但我不清楚为什么它打印如下所示的例子.

是因为

PrintGCApplicationStoppedTime 只需在每个安全点到达后打印

(要么)

日志文件将由不同的gc线程记录.我使用Concurrent扫描完整的GC和年轻一代的ParNew

我的应用是web应用程序.

O/p模式 - 我是这样的:

Application time: 0.3847031 seconds
Total time for which application threads were stopped: 0.3135419 seconds
Application time: 0.1520723 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 seconds
Application time: 0.1188219 seconds
Total time for which application threads were stopped: 0.1993920 …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection jvm jvm-hotspot verbosegc

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

HotSpot Serviceability Agent的iterateObjectsOfKlass()太慢了

我能够ObjectHeap.iterateObjectsOfKlass(在SA的帮助下)调用以获取属于某个类的所有对象.结果正是我所期望的,但性能却不是.

我花了800秒才得到我的结果,在此期间目标虚拟机被暂停.目标VM堆大约为2GB.我知道iterateObjectsOfKlass会打电话iterateExact.

我的问题是:这些方法迭代/遍历整个堆只是为了获得1个类的对象吗?我很失望,因为我的期望是单一课程,结果应该在10秒内返回.

java heap performance jvm jvm-hotspot

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

jstatd,找不到命令CentOS 7

我正在尝试从工作站监视VisualGC。
命令: java -version

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)

因此,我创建了一个策略文件,并尝试启动jstatd,如下所示。

文件名: jstatd.all.policy

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)

尝试执行的命令: jstatd -J-Djava.security.policy = jstatd.all.policy

错误: -bash:jstatd:找不到命令

命令: rpm -qa | grep java
输出:

tzdata-java-2017c-1.el7.noarch
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.151-5.b12.el7_4.x86_64
java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64
python-javapackages-3.4.1-11.el7.noarch
Run Code Online (Sandbox Code Playgroud)

另外,在visualvm的“选项卡:Visual GC”上,我看到“此JVM不支持”

java jvm jvm-hotspot database-performance cassandra-2.1

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

在另一个JNI函数中使用时,Oop会损坏

问题是我们可以缓存jclassjmethodID跨不同的JNI方法调用吗?

尝试通过缓存jclassjmethodID其他JNI方法调用创建某个特定类的对象时,遇到了一些奇怪的行为。

这是一个简单的示例:

public class Main {
    static {
        System.loadLibrary("test-crash");
    }

    public static void main(String args[]) throws InterruptedException {
        Thread.sleep(20000);
        doAnotherAction(doSomeAction());
    }

    private static native long doSomeAction();

    private static native void doAnotherAction(long ptr);
}

public class MyClass {
    public int a;

    public MyClass(int a) {
        if(a == 10){
            throw new IllegalArgumentException("a == 10");
        }
        this.a = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

JNI函数所做的只是创建类的对象MyClass。该函数doSomeAction返回一个指向已缓存的jclass和的指针jmethodID。这是本机方法的实现:

struct test{
    jclass mc; …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface jvm jvm-hotspot

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