我想计算我创建的对象(名为TreapDS的包中的Treap)的内存使用情况。我发现我需要根据this page来执行这些步骤。我总是使用Eclipse,因此我不熟悉使用命令运行Java代码。我问过如何在this page中根据该页面构建jar文件,但我没有得到任何答案。这是我的包的层次结构:
Indexing
| --- bin
|---- MemoryUsage
| -- mainfest.MF
| -- Myagent
| --- src
|--- treapDS
| |--- Treap
|---- MemoryUsage
| -- TestCase
| -- Myagent
我可以根据在此地址中运行命令来创建一个jar文件
Indexing/bin$ jar -cmf MemoryUsage/manifest.MF agent.jar MemoryUsage/MyAgent.class
它在 bin 文件夹中创建 agent.jar ,当我提取此jar文件时,包含的两个文件夹 MemoryUsage Myagent.class 和文件夹 META-INF ,其中包含 MANIFEST.MF
但是当我运行以下命令时,我得到了异常,我不知道如何通过提及Treap的地址来解决它。有没有办法用eclipse做到这一点?
/Indexing/bin$ java -javaagent:agent.jar -cp MemoryUsage/TestCase
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.NoClassDefFoundError: treapDS/Treap
at MemoryUsage.MyAgent.premain(MyAgent.java:9)
... 6 more
Caused by: java.lang.ClassNotFoundException: treapDS.Treap
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
FATAL ERROR in native method: processing of -javaagent failed
Aborted (core dumped)
答案 0 :(得分:0)
这是因为github "jakecraige/RGB" "master"
与treapDS
不同。类名称区分大小写!堆栈跟踪非常清楚:类加载器正在尝试加载TreapDS
而不是treapDS.Treap
而前者不存在。
修复您的源代码并重新编译,以便在任何地方都有适当的区分大小写的拼写,它应该消失。
大概是所有编译的原因'第一次是因为您在没有正确区分大小写的文件路径的操作系统上进行开发。