"Failed to load Premain-Class manifest attribute" while trying to get the size of an object using java agent
When i try to run a java program (java -javaagent:size.jar ObjectSizeTest
) i get the following error:
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
Here is ObjectSizeTest's code:
public class ObjectSizeTest {
public static void main(String[] args) {
String开发者_如何转开发 s = new String("sai");
System.out.println(ObjectSizeFetcher.getObjectSize(s));
}
}
MANIFEST.MF (for size.jar):
Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)
Premain-Class: ObjectSizeFetcher
and here is ObjectSizeFetcher's code:
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);
}
}
Make sure you have give full java path of the class containing the pre-main method. for example like this org.eclipse.anotherpckg.ObjectSizeFetcher. Secondly there must be a space before the name and carriage return at the end. for example
Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)
Premain-Class: org.eclipse.package.ObjectSizeFetcher
The last line is due to carriage return.
You should add in MANIFEST.MF:
Premain-Class: org.your.package.ObjectSizeFetcher
+ new line
insted
Premain-Class: ObjectSizeFetcher
It is an issue with the jar command itself. jar command must be used with cfm attributes, to include customized MANIFEST.MF, otherwise jar will create one file and insert its own contents which do not include the PreMain-Class attribute as we mention in customized manifest.mf file.
just run java size.jar ObjectSizeTest
the problem is caused by java agent it has a tranformer class.
精彩评论