首页 > 编程语言 >创建 Java 虚拟机JVM中的参数说明

创建 Java 虚拟机JVM中的参数说明

时间:2024-07-26 18:51:00浏览次数:10  
标签:Java 虚拟机 args JVM JNI options

1、上一篇创建虚拟机的代码加参数备注
var
Options: array [0 .. 4] of JavaVMOption;
VM_args: JavaVMInitArgs;
ErrCode: Integer;
begin
{ 创建 Java 虚拟机 }
FJavaVM := TJavaVM.Create(JNI_VERSION_1_8);
//这个选项设置 Java 类路径,指定 JVM 应该在哪里查找用户定义的类文件。您可以将其设置为包含您的 Java 类的目录
Options[0].optionString := PAnsiChar(AnsiString('-Djava.class.path=' + ExtractFilePath(ParamStr(0)) + 'classes'));
//JNI version java接口的版本号
VM_args.version := JNI_VERSION_1_8;
//给虚拟机参数赋值
VM_args.Options := @Options;
//Options数组的个数
VM_args.nOptions := 1;
//忽略无法识别的选项
VM_args.ignoreUnrecognized := True;
ErrCode := FJavaVM.LoadVM(VM_args);
if ErrCode < 0 then
begin
MessageBox(Handle, 'Create Java VM Error', 'Delphi 10.3 调用 Java Class', MB_OK OR MB_ICONERROR);
Halt;
Exit;
end;

{ 创建 Java 虚拟机运行环境 }
FJavaEnv := TJNIEnv.Create(FJavaVM.Env);
if FJavaEnv = nil then
begin
MessageBox(Handle, 'Create Java Env Error', 'Delphi 10.3 调用 Java Class', MB_OK OR MB_ICONERROR);
Exit;
end;
end;

2、一段c++中调用jvm的代码注释

include <jni.h>

include <stdio.h>

int main() {
JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine)
JNIEnv *env; // Pointer to native interface
JavaVMInitArgs vm_args; // Initialization arguments
JavaVMOption options[4]; // JVM options

// Set the JVM options
options[0].optionString = "-Djava.compiler=NONE";  // Disable JIT
options[1].optionString = "-Djava.class.path=c:\\myclasses"; // User classes
options[2].optionString = "-Djava.library.path=c:\\mylibs"; // Native library path
options[3].optionString = "-verbose:jni"; // Print JNI-related messages

vm_args.version = JNI_VERSION_1_2; // JNI version
vm_args.options = options; // Options
vm_args.nOptions = 4; // Number of options
vm_args.ignoreUnrecognized = JNI_TRUE; // Ignore unrecognized options

// Create the JVM
jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (ret != JNI_OK) {
    fprintf(stderr, "Failed to create JVM\n");
    return 1; // Exit with error
}

// Your JNI code here

// Destroy the JVM
jvm->DestroyJavaVM();
return 0; // Exit successfully

}
①代码说明
JNI_CreateJavaVM: 这是创建 Java 虚拟机的函数。如果成功,它将返回 JNI_OK,否则返回一个错误代码。
jvm->DestroyJavaVM(): 在完成所有 JNI 操作后,记得调用此函数来销毁 JVM。
②注意事项
确保您已正确设置 Java 环境变量,并且指定的路径是正确的。
如果您在 Windows 上运行此代码,确保使用双反斜杠 \ 来分隔路径。
适当处理 JNI 调用的错误和异常,以确保程序的健壮性。
③选项解释
-Djava.compiler=NONE:
这个选项禁用 JIT(即时编译器)。在某些情况下,您可能希望禁用 JIT 编译,以便更容易调试或分析 Java 代码的执行。
-Djava.class.path=c:\myclasses:
这个选项设置 Java 类路径,指定 JVM 应该在哪里查找用户定义的类文件。您可以将其设置为包含您的 Java 类的目录。
-Djava.library.path=c:\mylibs:
这个选项设置 JNI 的本地库路径,指向包含本地共享库(如 DLL 文件)的目录。JNI 代码通常会调用这些本地库。
-verbose:jni:
这个选项启用 JNI 相关的详细输出,帮助调试和跟踪 JNI 调用过程。

标签:Java,虚拟机,args,JVM,JNI,options
From: https://www.cnblogs.com/ljk2008/p/18326039

相关文章

  • java静态代码检测-spotbugs
    以前使用的findbugs宣布在2016年后已经不做维护了,取而代之的是spotbugs.要想使用spotbugs,需要在代码仓库中做一些配置1.在maven项目的pom.xml文件中,加入依赖包: officalwebsiteurlreference: https://spotbugs.readthedocs.io/en/latest/maven.html<plugin><groupId......
  • LeetCode 2.两数相加 java
    力扣链接2.两数相加-力扣(LeetCode)题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0......
  • 【一手源码展示】Java代码TikTok内嵌商城代码程序,TikTok跨境电商系统源码,TK商城源码
    这套程序已经做了很久了我这边修复二开优化也好几个版本搭建起来做起来确实费劲前后端分离的程序 二开效果页面展示:......
  • VMware Fusion Pro 虚拟机 免费了附最新版 13.5.2-23775688 下载地址
    VMwareFusionPro可以帮助用户在Mac上安装Windows、Linux等多种操作系统,最重要的是无需重启电脑切换系统,可以和MacOS系统同时运行,就类似于MacOS安装了一个应用。对于家庭用户来说足够简单,对于IT专业人员,开发人员和企业来说足够强大。VMwareFusionPro是一款强大的......
  • Java-----学习笔记4
    Java中的方法Java中的方法与C语言的函数有些相似,它们都是为了完成特定功能的代码块,都可以被多次调用。main方法publicstaticvoidmain(String[]args){}public---访问控制符,控制方法可见性。static---这个关键字表示该方法是静态的。void---返回类型void--不需要......
  • 写好JavaScript条件语句的5条守则
    照抄https://juejin.im/post/5bdef288e51d450d810a89c6testEquals(fruit){if(fruit==='apple'||fruit==='strawberry'){console.log('==');}},testIncludes(fruit){constredFruits=['......
  • 007-java使用socket测试远程服务器的某个端口是否可连接
    importjava.io.IOException;importjava.net.InetSocketAddress;importjava.net.Socket;/***@authorzzl*/publicclassPortChecker{publicstaticbooleanisPortReachable(Stringhost,intport,inttimeout){try(Socketsocket=newSoc......
  • GraalVM 静态编译下 OTel Java Agent 的自动增强方案与实现
    作者:望陶、铖朴随着OpenTelemetry在可观测领域影响力的不断提升,其项目以极快的速度不断演进。阿里云作为国内最广泛使用Java的厂商之一,深度参与OTelJava Instrumentation演进与社区活动,贡献、Review各类PR(pullrequest)合计超过100 余个,参与Issues讨论58个,在Op......
  • Java卷上天,可以转行干什么?
    小刚是某名企里的一位有5年经验的高级Java开发工程师,每天沉重的的工作让他疲惫不堪,让他萌生出想换工作的心理,但是转行其他工作他又不清楚该找什么样的工作因为JAVA这几年的更新实在是太太太……快了,JAVA8都还没用多久,16都已经发布了。自从JAVA8发布了Lambda和Stream......
  • Java卷上天,可以转行干什么?
    小刚是某名企里的一位有5年经验的高级Java开发工程师,每天沉重的的工作让他疲惫不堪,让他萌生出想换工作的心理,但是转行其他工作他又不清楚该找什么样的工作因为JAVA这几年的更新实在是太太太……快了,JAVA8都还没用多久,16都已经发布了。自从JAVA8发布了Lambda和Stream......