0 0

C++/JNI编写的组件,是否可以同时启动JAVA虚拟机来创建不同的对象实例5

C++/JNI编写的组件,是否可以同时启动JAVA虚拟机来创建不同的对象实例:
本人现在用C++/JNI编写了个DLL组件,然后通过它进行调用其他JAVA程序接口,但目前实现只能以单件模式来起用JAVA虚拟机,这样就会造成一个问题:如果第一个对象实例没有释放,第二个对象只能等待,请问是否可以允许不同对象同时来执行JAVA虚拟机?如果可以请问是如何实现的?谢谢!
以下是本人实现的部分代码:

#if !defined(__JAVA_VM_H__)
#define __JAVA_VM_H__
#pragma warning(disable:4786)
#include <map>
#include <string>
#include "Singleton.h"
#include "JNI_Object.h"

class JAVA_VM: public SinglePattern
{
DECLARE_SINGLETON(JAVA_VM)//将类定义为Singleton模式

protected:
virtual void InitialInstance();
virtual void DisposeInstance();
public:
typedef std::map<long,JNI_Env*>  _ID2Env;
typedef _ID2Env::iterator _ID2EnvIt;

public:
bool m_Status;
JNI_Env* startSubThread();
void endSubThread();
JNI_VM* getVM()const;
JNI_Env* getEnv();

private:
JNI_Env* m_lpMainEnv;
JNI_VM* m_lpVM;
_ID2Env m_EnvMap;
long m_MainThreadID;
private://disable
JAVA_VM(const JAVA_VM&);
JAVA_VM& operator=(const JAVA_VM&);
};

#endif // !defined(__JAVA_VM_H__)
2008年12月09日 11:04

1个答案 按时间排序 按投票排序

0 0

用JNI技术,在同一个JVM中,当然可以创建多个对象。

2008年12月24日 18:18

相关推荐

    使用C++创建java虚拟机JVM,使用JNI调用java函数.zip

    本文将深入探讨如何使用C++创建Java虚拟机(JVM),并通过JNI来调用Java函数。这是一项技术性很强的任务,需要对C++编程、Java虚拟机的工作原理以及JNI接口有深入的理解。 首先,Java虚拟机(JVM)是Java平台的核心...

    JNI攻略之十一――启动虚拟机调用java类

    - **创建Java虚拟机实例**:调用`JNI_CreateJavaVM`函数。 - **查找Java类和方法**:使用`FindClass`和`GetStaticMethodID`函数。 - **创建并传递参数**:通过`NewStringUTF`和`NewObjectArray`函数准备参数。 - **...

    JNI攻略之十――操作Java虚拟机

    2. **启动虚拟机**:调用`JNI_CreateJavaVM`函数来创建Java虚拟机实例。 3. **释放虚拟机资源**:完成任务后,通过调用`DestroyJavaVM`方法来释放Java虚拟机占用的资源。 ##### 示例代码分析 以下是一个简单的示例...

    使用C/C++实现Java的Native方法接口(JNI)/ JNI编程(C/C++) 代码实例

    本教程将详细介绍如何使用C/C++实现Java的Native方法接口,并通过代码实例来展示JNI编程的基本步骤。 1. **JNI简介** JNI是一种规范,它定义了Java虚拟机(JVM)和本地代码之间的接口。通过JNI,开发者可以在Java...

    visual studio 2019下C++通过JNI调用JAVA代码

    在本文中,我们将深入探讨如何在Visual Studio 2019环境下使用C++通过Java Native Interface (JNI)来调用Java代码。JNI是Java平台的一部分,它为Java应用程序提供了与本地代码交互的能力,使得开发者可以将Java应用...

    Android-JNI完整工程,实现c++调用java和java调用c++

    - JNI接口提供了Java虚拟机(JVM)和本地代码之间的桥梁,使得开发者可以使用Java调用C/C++函数,反之亦然。 - JNI头文件(`jni.h`)包含了定义了JNI函数和数据类型的声明,是编写JNI代码的基础。 2. **创建JNI...

    教你java和C++的jni编程

    Java和C++之间的JNI(Java Native Interface)编程是一种技术,允许Java代码调用本地(非Java)代码,如C++,反之亦然。这在需要高效计算能力、利用硬件特性或者整合现有C/C++库时非常有用。以下是对标题和描述中...

    jni.zip_c调用java_java 调用 c++_安卓 JNI

    JNI是Java平台标准的一部分,旨在提供一个安全、高效的方式来调用和被调用,使得开发者可以利用C/C++的高性能特性,同时保持Java的跨平台优势。以下将详细阐述JNI的工作原理、使用场景以及如何实现Java调用C/C++和C/...

    JNI中C调用Java方法的实例

    JNI提供了一套接口,让本地(native)代码能够访问Java虚拟机(JVM),执行Java类的方法,甚至创建和操作Java对象。这包括了加载类、找到方法ID、调用方法以及处理Java对象等操作。 在这个实例中,我们有以下几个...

    JAVA通过JNI调用C++代码函数的示例DEMO

    在Java编程环境中,有时我们需要利用C或C++的高效性能来执行特定任务,这时我们可以借助Java Native Interface(JNI)来实现。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。本示例DEMO将...

    Android的JAVA虚拟机和JAVA环境

    Android Studio是官方推荐的集成开发环境(IDE),它基于IntelliJ IDEA,集成了所有必要的工具来创建和管理Java项目。 **Android的类库** Android提供了一个丰富的类库,使开发者可以方便地访问设备的功能,如...

    JNI技术手册 c/c++调用java

    ### JNI技术手册:C/C++与Java互调详解 #### 一、JNI技术概览 **JNI(Java Native Interface)** 是Java平台的一部分,它允许Java代码与其他语言写的代码进行交互,尤其是C和C++。JNI是Java与本地代码之间沟通的...

    java调用c c++程序实例

    接下来,在C/C++端,你需要使用JNI头文件(通常在Java安装目录下的`include`子目录下)来创建本地方法。这些头文件提供了JNI函数,用于与Java虚拟机(JVM)交互。以下是一个简单的示例: ```c++ #include &lt;jni.h&gt; #...

    java的jni实例(内有详细说明)

    开发人员需要编写Java代码来声明本地方法,然后创建对应的本地方法实现,这通常是由C或C++编写的。本地方法通过JNI函数调用来访问Java对象、字段和方法。 步骤1:创建Java类并声明本地方法 在Java源文件中,你需要...

    jniAPI JAVA的JNI编写帮助文档

    8. **调用Java方法**: JNI提供了多种函数来调用Java方法,如`CallVoidMethod`, `CallIntMethod`, `CallStaticVoidMethod`等,分别对应不同返回类型和调用类型(实例方法或静态方法)。 9. **处理Java对象**: JNI...

    jni java传递对象到C

    在Java编程中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C和C++)进行交互。当我们需要高效地处理数据、利用特定平台的库或者优化性能时,JNI就显得尤为重要。本文将深入探讨...

    JAVA虚拟机解读入门

    此外,书中还会详细介绍垃圾收集的工作原理,包括如何判断对象是否存活,以及不同垃圾收集器的特点和应用场景。 在深入理解JVM后,你将具备优化Java应用性能的能力,例如调整堆大小、设置合适的垃圾收集器、理解和...

    JNI编程(二) —— 让C++和Java相互调用(2)

    `JNIEXPORT`和`JNICALL`宏是JNI约定的调用约定,`JNIEnv*`指向一个包含所有JNI函数指针的结构体,`jobject`参数是Java对象实例的引用。在这个例子中,`Java_HelloWorld_sayHello`是C++函数的特定命名规则,由Java...

    webrtc-android-jni.rar

    9. **性能优化**:JNI的使用可以充分利用CPU和GPU资源,例如在C++层进行音频编解码,减轻Java虚拟机的压力。同时,可以通过多线程和异步操作进一步优化性能。 10. **内存管理**:由于涉及到Java和C++的内存空间,...

    C++与Java混合编程实例

    JNI提供了一套API,使得Java虚拟机(JVM)能够调用C/C++函数,同时C++代码也能调用Java对象的方法。 2. **中间件或通信协议**:另一种方式是通过网络通信,如HTTP、RPC、RMI(远程方法调用)等协议,将C++和Java...

Global site tag (gtag.js) - Google Analytics