diff --git a/README.md b/README.md index c0a0531b6d403ff5abbb3dcab859ee3208c6565a..db6c1cca8579fd2d07b82629da23167900d7f07c 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Call JVM from C/C++ in ThreadPool Using JNI - jni.h : java JNI接口函数 - jni_md.h : jni.h调用的必要函数 - main.cpp : 测试主程序 -- pureMultithread.cpp : 干净的多线程程序 +- pureMultithread.cpp : 纯净的多线程程序 - qin_test1.jar : 测试的jar包1 - qin_test.jar : 测试的jar包0 - server.cpp : socket服务器程序 @@ -100,6 +100,7 @@ Call JVM from C/C++ in ThreadPool Using JNI ### 程序编译 +可根据CMakeLists.txt文件中的 ```shell script cd callJvmThreadpool cmake .. @@ -108,13 +109,13 @@ cmake .. ### 程序目的 -- 最初目的:使用C++代码调用java编写的代码 -- 中间目的:使用多线程方式调用java代码 -- 最终目的:使用线程池方式减少多线程带来的资源消耗调用java代码 +- 最初目的:使用C++代码通过JNI接口调用Java模块代码(实际上是启动一个JVM,在JVM中运行Java模块代码) +- 中间目的:使用多线程技术由每次调用JNI生成一个JVM,提升为生成多个JVM线程运行Java模块代码 +- 最终目的:使用线程池技术预先生成多个JVM线程,减少多线程调用Java模块代码带来的资源消耗 ### 注意事项 -- C++调用Java JNI是一种不得已而为之的方法,其调用开销很大,并不值得 -- 为了解决JNI调用问题,调整为使用socket方案,使用本地文件映射,开销大大减小 +- C++通过JNI接口调用Java模块代码是一种不得已而为之的方法,每次调用JNI启动JVM的开销都很大,并不值得 +- 为了解决JVM “一调一用” 问题,后程序框架调整为使用UNIX Domain Socket方案,在本地进行文件数据映射,大大减小开销 ### 相关内容 diff --git a/callJvmThreadpool/CMakeLists.txt b/callJvmThreadpool/CMakeLists.txt index e4ce1aa45559acfb0c845f51cb5ecea081fb3d52..13f74834eb1f3c97c43cc1393a5e1b5050cd7b35 100755 --- a/callJvmThreadpool/CMakeLists.txt +++ b/callJvmThreadpool/CMakeLists.txt @@ -3,8 +3,10 @@ project(callJvmThreadpool) set(CMAKE_CXX_STANDARD 14) +# 运行环境配置的java运行环境路径 include_directories(/usr/local/java/include /usr/local/java/include/linux) +# 编译选项(可不修改) add_definitions( -O3 -g -W -Wall -Wunused-variable -Wunused-parameter -Wunused-function -Wunused @@ -12,6 +14,9 @@ add_definitions( -D__WUR= -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DTIXML_USE_STL ) +# 编译文件 +# 除jni.h jni_md.h tpool.cpp tpool.h文件外, +# 下面每个文件都可选择性编译(含有main函数的文件不可同时编译) add_executable(main jni.h jni_md.h tpool.cpp tpool.h # test.cpp # main.cpp @@ -20,5 +25,7 @@ add_executable(main jni.h jni_md.h tpool.cpp tpool.h socketThreadpool.cpp ) + +# 链接的动态库,包括java的libjvm.so文件和linux多线程的libpthread.so文件 target_link_libraries(main /usr/local/java/jre/lib/amd64/server/libjvm.so /usr/lib/x86_64-linux-gnu/libpthread.so)