如何开启java虚拟机?

张得帅i|用户:想咨询的 如何开启java虚拟机,java 虚拟机

好多好多好多余 i|用户:好的回答:

最佳答案:

配置环境变量。
右击“我的电脑”->属性->高级->环境变量,在“系统变量”中设置变量名为JAVA_HOME,值为JDK安装路径,一般为C:\Program Files\Java\jdk***;然后在path变量中添加%JAVA_HOME%\bin;以分号与前面的路径隔开.最后在添加一个变量classpath,设置这个变量值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;然后再去解压Eclipse或者打开Eclipse

用户:卖萌抱着五颜六色的电风扇的其他回答:2、你想把DOS窗口里面显示的内容记录到文件里面,以便你以后分析。这是个很有用的功能。通常很多异常堆栈,和系统发生的异常消息都是在DOS窗口中输出的,有时输出内容太多时,DOS窗口以前显示的内容就看不见了,DOS窗口关掉后,你也没法再看到以前显示的内容了。 3、在windows下面,你想把java程序做成一个后台服务,就像tomcat那样,这样就可以让windows操作系统帮你管理java程序的启动和停止了。 4、 你在开发象IE这样的程序,在必要的时候才启动虚拟机运行一段Java程序 本文就教你如何做到这一点。 C++加载虚拟机的两种方法比较 加载虚拟机可以采用以下两种方法: 1、用创建子进程的方法调用java.exe来启动,在windows下面可以用CreateProcess方法,在Linux下面可以用execvp方法,调用的方式和用脚本调用差不多,这种方法比较简单我就不详细介绍了,详细的方式可以参考开源项目 Java Service Wrapper。用创建子进程的方式用以下优点: 1) 开发简单,兼容性好,对于java虚拟机的不同版本调用方式都是一样的 2) 创建出来的java进程和C++程序的进程分离,不会相互影响,你不会因为C程序出现什么内存错误崩溃导致java进程也一起完蛋(当然分离进程也带来了其他问题,详见我后面的分析)。但是我不太喜欢这种方法,因为有以下缺点: 1)生成分离的java进程后,在系统里会看到另外一个java.exe的进程,当启动了很多这样的进程时,你会看到很多名称为java的进程,你无法区分哪个是哪个。 2) 生成了分离的Java 进程后,你就不好对它进行控制,比如说要关闭它,如果直接kill掉java进程,可能java进程里面一些关闭时需要做的清理工作还来不及做。如果想让java程序执行清理工作再退出,你就需要建立和java程序之间的通讯机制,以向java程序发出退出的消息,这通常还需要在java程序里面加载专门的类,以及需要java程序的开发人员进行相关的接口开发工作。 2、加载java虚拟机的另外一种方法是加载jvm的动态库,并通过动态库的接口来在本进程内启动java虚拟机。"); return false; } } Linux平台的加载方法 Linux平台下的虚拟机的加载方法跟windows平台基本一致,不同的地方仅在于加载动态库的方法不同,在linux平台的JDK中,jvm动态库所在的路径为 $JAVA_HOME/jre/lib/i386/client/libjvm.so $JAVA_HOME/jre/lib/i386/server/libjvm.so 在Linux下装载动态库的示例代码如下: #include #include #include typedef void* (*JNICREATEPROC)(JavaVM **, JNIEnv **, void *); bool startJVM() { JNIEnv *env; JavaVM *jvm; jclass cls; jmethodID mid; jobjectArray args; //jvm动态库的路径 const char szJvmPath[] = "/usr/jdk1.5.0_01/jre/lib/i386/server/libjvm.so"; //启动类 const char szStartClass[] = "test/JTest"; //启动方法 const char szStartMethod[] = "main"; //Java启动参数 int nOptionCount = 2; JavaVMOption options[2]; options[1].optionString = "-Xmx256M"; options[0].optionString = "-Djava.class.path=./Test.jar;./Test1.jar"; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_4; vm_args.options = options; vm_args.nOptions = nOptionCount; vm_args.ignoreUnrecognized = JNI_TRUE; //命令行参数 int nParamCount = 2; const char *szParams[2] = {"arg1","arg2"}; //装载动态库 void* lib_handle = 0; lib_handle = dlopen(szJvmPath, RTLD_NOW); if (!lib_handle) { fprintf(stderr, "dlopen failed\n"); return false; } JNICREATEPROC lib_func = 0; //查找JNI_CreateJavaVM过程 lib_func = (JNICREATEPROC)dlsym(lib_handle, "JNI_CreateJavaVM"); lib_func(&jvm,&env,&vm_args); //后面与windows平台处理流程完全一样 cls = env->FindClass(szStartClass); if (cls == 0) { fprintf(stderr, "Can't find class:%s\n",szStartClass); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } return false; } mid = env->GetStaticMethodID(cls, szStartMethod,"([Ljava/lang/String;)V"); if (mid == 0) { fprintf(stderr, "Can't find Method:%s\n",szStartMethod); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } return false; } jclass stringClass = env->FindClass("java/lang/String"); if (env->ExceptionCheck() == JNI_TRUE || stringClass == NULL) { fprintf(stderr, "find String class error"); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } return false; } args = env->NewObjectArray(nParamCount, stringClass, NULL); if (args == 0) { fprintf(stderr, "Out of memory\n"); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } return false; } jstring jstr; for (int i=0; iNewStringUTF(szParams[i]); if (jstr == 0) { fprintf(stderr, "Out of memory\n"); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } jvm->DestroyJavaVM(); return false; } env->SetObjectArrayElement(args, i, jstr); if (env->ExceptionCheck() == JNI_TRUE) { fprintf(stderr, "set param error\n"); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); } jvm->DestroyJavaVM(); return -1; } } env->CallStaticVoidMethod(cls, mid, args); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); return false; } return true; } typedef jint (JNICALL *JNICREATEPROC)(JavaVM **, void **, void *); bool setStream(JNIEnv *env, constchar* pszFileName, constchar* pszMethod); //启动java虚拟机方法 bool startJvm() { //jvm动态库的路径 constchar szJvmPath[] = "c:\\jdk1.5.0_01\\jre\\bin\\server\\jvm.dll"; //java 虚拟机的启动参数,每个参数写一项,不能合在一起写 int nOptionCount = 2; JavaVMOption options[2]; options[1].optionString = "-Xmx256M"; //设置classpath options[0].optionString = "-Djava.class.path=./Test.jar;./Test1.jar"; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_4; vm_args.options = options; vm_args.nOptions = nOptionCount; vm_args.ignoreUnrecognized = JNI_TRUE; //启动类,注意分割符是/,例如启动类test.JTest应该写成 test/JTest constchar szStartClass[] = "test/JTest"; //启动方法,通常是main函数,你也可以设定成其他函数 constchar szStartMethod[] = "main"; //重导向文件 constchar szStdoutFileName = "stdout.txt"; constchar szStderrFileName = "stderr.txt"; //java程序的命令行参数 int nParamCount = 2; constchar *szParams[2] = {"arg1","arg2"}; //加载JVM。


用户:悉。的其他回答:1.JAVA虚拟机可以看成是解释执行(比如basic语言)字节代码的计算机。
2.Java本身的编译器用Java语言编写,执行代码的虚拟机用C语言实现。
3.Java语言的执行模式是半编译和半解释型,程序首先由编译器转换为标准字节代码,然后由Java虚拟机去解释执行,字节代码实际上可以看作是虚拟机的机器代码。
4.JAVA虚拟机实现了代码与硬件和操作系统的隔离,做到了较强的可移植性。


用户:〆轉身回眸╮丶淚傾城ヅ的其他回答:可以用cmd启动,但是启动参数非常复杂,具体参数如下图(1.7.2with forge的)
至于代码,目前好的开源启动器有bmcl。代码地址:http://pan.baidu.com/s/1jGj9EGe(这里不能贴网址,是github的)


用户:凉兮* Armani的其他回答:我的电脑属性里面啊 点满意答复哦


用户:我在寻找你在逃趁着不深的其他回答:JVM肯定是C和C++一起实现的,参见C++之父的书籍《Evolving_a_language_in_and_for_the_real_world_C++_.pdf》
而且真正的JVM里面的Java代码也很多,都是充当JDK的角色的。