使用JNI加载JAVA虚拟机

简介: 使用JNI加载JAVA虚拟机

 在C中,直接使用JNI加载虚拟机,也是很有意思的想法。

  这个工作不难,吾已经完成了。下面这个代码不是我的代码,没有真正测试过。以后有机会再测试。

#include <jni.h>
using namespace std;
int main(const int argc, const char** argv)
{
    JavaVMOption options[7];
    JNIEnv *env;
    JavaVM *jvm;
    JavaVMInitArgs vm_args;
    options[0].optionString = "-XX:+UseG1GC";
    options[1].optionString = "-XX:-UseAdaptiveSizePolicy";
    options[2].optionString = "-XX:-OmitStackTraceInFastThrow";
    options[3].optionString = "-Xmn512m";
    options[4].optionString = "-Xmx2048m";
    options[5].optionString = "-Djava.library.path=natives";
    options[6].optionString = "-Djava.class.path=.;libraries.zip;main.jar";
    std::memset(&vm_args, 0, sizeof(vm_args));
    vm_args.version = JNI_VERSION_1_8;
    vm_args.nOptions = 7;
    vm_args.options = options;
    cout << "start creat jvm!\n";
    long status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
    if (status == JNI_ERR)
    {
        return 0;
    }
    cout << "jvm created success\n";
    jclass cls = env->FindClass("main/Main");
    if (cls != NULL)
    {
        jmethodID mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
        if (mid != NULL)
        {
            jclass clz_string = env->FindClass("java/lang/String");
            jobjectArray result = env->NewObjectArray(2, clz_string, NULL);
            jstring arg0 = env->NewStringUTF("first");
            env->SetObjectArrayElement(result, 0, arg0);
            jstring arg1 = env->NewStringUTF("second");
            env->SetObjectArrayElement(result, 1, arg1);
            env->CallStaticVoidMethod(cls, mid, result);
        }
        else
        {
            cout << "class not found\n";
        }
    jvm->DestroyJavaVM();
    return 0;
}
目录
相关文章
|
4月前
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
1月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
51 6
|
3月前
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
232 1
|
3月前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
72 11
|
3月前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
116 11
|
4月前
|
SQL Java 数据库连接
java连接数据库加载驱动到java项目
该博客文章介绍了如何在Java项目中通过代码加载数据库驱动并连接SQL Server数据库,包括具体的加载驱动和建立数据库连接的步骤,以及如何将驱动包添加到Java项目的构建路径中。
|
4月前
|
开发框架 Java Android开发
JNI中调用Java函数
JNI中调用Java函数
30 0
|
4月前
|
开发框架 Java Android开发
JNI中调用Java函数
JNI中调用Java函数
35 0
|
4月前
|
Java 数据安全/隐私保护 Windows
【Azure Developer】使用Java代码启动Azure VM(虚拟机)
【Azure Developer】使用Java代码启动Azure VM(虚拟机)
|
4月前
|
存储 Java API
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率