21

当我尝试运行 java 程序 ( java -javaagent:size.jar ObjectSizeTest) 时,我收到以下错误:

Failed to load Premain-Class manifest attribute from D:\workspace\ObjectSizeTest\size.jar
Error occurred during initialization of VM
agent library failed to init: instrument

这是 ObjectSizeTest 的代码:

public class ObjectSizeTest {
    public static void main(String[] args) {
        String s = new String("sai");
        System.out.println(ObjectSizeFetcher.getObjectSize(s));
    }
}

MANIFEST.MF(用于 size.jar):

Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)

Premain-Class: ObjectSizeFetcher

这是 ObjectSizeFetcher 的代码:

import java.lang.instrument.Instrumentation;

public class ObjectSizeFetcher {
    private static Instrumentation instrumentation;

    public static void premain(String args, Instrumentation inst) {
        instrumentation = inst;
    }

    public static long getObjectSize(Object o) {
        return instrumentation.getObjectSize(o);
    }
}
4

4 回答 4

10

确保您已提供包含 pre-main 方法的类的完整 java 路径。例如像这样的 org.eclipse.anotherpckg.ObjectSizeFetcher。其次,名称和最后的回车之前必须有一个空格。例如

Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)
Premain-Class: org.eclipse.package.ObjectSizeFetcher

最后一行是由于回车。

于 2011-09-01T12:11:29.623 回答
6

您应该在 MANIFEST.MF 中添加:

Premain-Class: org.your.package.ObjectSizeFetcher+ 新线

安装

Premain-Class: ObjectSizeFetcher

于 2016-06-04T12:46:14.667 回答
1

这是 jar 命令本身的问题。jar 命令必须与 cfm 属性一起使用,以包含自定义的 MANIFEST.MF,否则 jar 将创建一个文件并插入自己的内容,其中不包含我们在自定义 manifest.mf 文件中提到的 PreMain-Class 属性。

于 2014-02-07T09:56:01.413 回答
0

刚刚运行java size.jar ObjectSizeTest的问题是由java代理引起的,它有一个变压器类。

于 2019-05-15T08:26:58.290 回答