我已经阅读了很多关于Java类加载器的内容,但到目前为止我还没有找到这个简单问题的答案:
我在jars v1.jar和v2.jar中有两个版本的com.abc.Hello.class.我想在我的应用程序中使用它们.这样做最简单的方法是什么?
我不希望那么简单,但沿着这些方向的东西会很棒:
Classloader myClassLoader = [magic that includes v1.jar and ignores v2.jar]
Hello hello = myclassLoader.load[com.abc.Hello]
Run Code Online (Sandbox Code Playgroud)
而在另一个班级:
Classloader myClassLoader = [magic that includes v2.jar and ignores v1.jar]
Hello hello = myclassLoader.load[com.abc.Hello]
Run Code Online (Sandbox Code Playgroud)
我想避免使用OSGi.
在调用声明为的Java方法时,JVM运行时必须执行的常规步骤是native什么?
HotSpot 1.8.0 JVM如何实现JNI函数调用?涉及哪些检查步骤(例如返回后未处理的异常?),JVM要执行哪些簿记(例如本地参考注册表?),以及在调用本机Java方法后控制在哪里?如果有人可以提供本机HotSpot 1.8.0代码的入口点或重要方法,我也将不胜感激.
免责声明:我知道我可以自己阅读代码,但事先的解释有助于快速找到我的代码.此外,我发现这个问题值得谷歌搜索.;)
我的Java应用程序使用DLL库.如何从JAR文件中获取它?
DLL位于项目的sources文件夹中.我必须将它包含在我的JAR中,在运行时提取它(在jar的同一目录中)并加载它.
对于测试,我想从应用程序加载两个共享库实例.库中的代码提供了API,但它不允许我初始化库的两个(或更多)实例,因为某些函数依赖于静态变量.
我正在为这个lib编写单元测试,我想有两个实例,因为这会简化我的测试.
该库未链接到该程序.相反,我使用LoadLibrary/GetProcAddress(或Linux上的dlopen/dlsym)直接加载它.为了区分这两个库,我可以简单地为我正在加载的函数指针使用不同的名称...
以下是问题:
是否可以加载这样的库两次?例如,库的所有已加载实例应该获得自己的数据段,并且不会相互影响.
如果是这样:这对于Windows和Linux来说是否可移植?