Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Failed to load Premain-Class manifest attribute" while trying to get the size of an object using java agent

Tags:

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);
    }
}
like image 914
java_geek Avatar asked Feb 15 '10 14:02

java_geek


3 Answers

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.

like image 54
user758867 Avatar answered Oct 15 '22 08:10

user758867


You should add in MANIFEST.MF:

Premain-Class: org.your.package.ObjectSizeFetcher + new line

insted

Premain-Class: ObjectSizeFetcher

like image 34
Max Gabderakhmanov Avatar answered Oct 15 '22 09:10

Max Gabderakhmanov


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.

like image 27
maruthy Avatar answered Oct 15 '22 10:10

maruthy