java 什么是 premain() 以及如何调用它?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27851588/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
What is premain() and how does it get called?
提问by displayname
I have never heard of a premain
and I feel a little stupid to ask but the answer of this postsuggests to run it in order to get the Instrumentation
object.
我从未听说过 apremain
并且我觉得问起来有点愚蠢,但这篇文章的答案建议运行它以获取Instrumentation
对象。
But how does that function get called or how do I make it getting called?
但是如何调用该函数或如何使其被调用?
package playground;
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);
}
}
回答by RealSkeptic
The premain
is a mechanism associated with the java.lang.instrument
package, used for loading "Agents" which make byte-code changes in Java programs.
这premain
是一种与java.lang.instrument
包相关联的机制,用于加载在 Java 程序中进行字节码更改的“代理”。
The mechanism is explained in the java.lang.instrument
documentation.
该机制在java.lang.instrument
文档中进行了解释。
The gist of it is that the "agent" is deployed in a jar, and that jar has a special entry in its manifest, that tells the instrumentation package where to look for the premain method. The source you quoted is supposed to be a simple agent.
它的要点是“代理”部署在一个 jar 中,并且该 jar 在其清单中有一个特殊条目,它告诉检测包在哪里查找 premain 方法。您引用的来源应该是一个简单的代理。