提交 ffe64b65 编写于 作者: X xwhqsj

update readme.md and CMakeLists.txt

上级 a5ee720a
......@@ -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方案,在本地进行文件数据映射,大大减小开销
### 相关内容
......
......@@ -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)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册