matlab的exec程序,C++调用Matlab画图的一段程序

劳动节闲来无事,写了一天程序,just for fun.

看,这是C++调用Matlab画图的一段程序。暂时不想多解释了,有兴趣的话,看看下面的代码吧。

以下几段代码由上到下,越来越旧。最上面的是最新更新的版本。#include#include#include#include#includeusing namespace std;

#include#include#includeclass MatArray

{

public:

MatArray() : _data(NULL){}

MatArray(size_t irows, size_t icols){

resize(irows, icols);

}

MatArray(const MatArray &obj){

if (obj._data){

_data = mxCreateDoubleMatrix(obj.rows(), obj.cols(), mxREAL);

memcpy(this->ptr(), obj.ptr(), sizeof(double)*rows()*cols());

}

else{

_data = NULL;

}

}

~MatArray(){ mxDestroyArray(_data); _data = NULL; }

inline size_t rows() const { return _data ? mxGetM(_data) : 0; }

inline size_t cols() const { return _data ? mxGetN(_data) : 0; }

inline double* ptr() const { return _data ? mxGetPr(_data) : NULL; }

bool resize(size_t irows, size_t icols){

if (!_data){

_data = mxCreateDoubleMatrix(irows, icols, mxREAL);

return (_data != NULL);

}

if (rows() == irows || cols() == icols){

return true;

}

mxDestroyArray(_data);

_data = mxCreateDoubleMatrix(irows, icols, mxREAL);

return (_data != NULL);

}

int put(Engine *ep, const char* var_name){

return engPutVariable(ep, var_name, _data);

}

templatevoid copy_from_eigen(const EigenMat &emat){

if (emat.rows()*emat.cols() == 0){

mxDestroyArray(_data); _data = NULL;

}

resize(emat.rows(), emat.cols());

for (int c = 0; c 

for (int r = 0; r 

(*this)[r + c*(int)(emat.rows())] = emat(r, c);

}

}

}

inline double& operator[](int i){

return ptr()[i];

}

private:

mxArray *_data;

};

string rndcolor(){

string color = "[";

color += to_string((rand() % 256) / 255.) + ",";

color += to_string((rand() % 256) / 255.) + ",";

color += to_string((rand() % 256) / 255.) + "]";

return color;

}

class Matlab

{

private:

Matlab(const Matlab &obj){}

public:

Matlab(){

_engine = engOpen(NULL);

if (!_engine){

cerr <

}

else{

cout <

}

}

~Matlab(){

// if you are testing algorithm, you are encouraged to keep the line below bing committed.

//engClose(_engine); _engine = NULL;

}

// line_spec : "LineStyle" + "Marker" + "Color", e.g. "-or"

// for line

// "LineStyle" = {"none", "-", ":", "-."}

// "LineWidth" = 0.5

// "Color" = {[0 0.4470 0.7410] (default) | RGB triplet | {y,m,c,r,g,b,w,k} | 'none'}

// for Marker

// "Marker" = {"none", "o", "+", "*", ".", "x", "s", "d", "^", "v", ">", "

// "MarkerEdgeColor" = 'auto' (default) | 'none' | RGB triplet | {y,m,c,r,g,b,w,k}

// "MarkerFaceColor" = 'auto' (default) | 'none' | RGB triplet | {y,m,c,r,g,b,w,k}

// "MarkerSize" = 6

templateint plot(const TMatX &X, const TMatY &Y,

string nm0  = "",

string nm1  = "", string nm2  = "",

string nm3  = "", string nm4  = "",

string nm5  = "", string nm6  = "",

string nm7  = "", string nm8  = "",

string nm9  = "", string nm10 = "",

string nm11 = "", string nm12 = "",

string nm13 = "", string nm14 = ""

){

MatArray MX, MY;

MX.copy_from_eigen(X); MX.put(_engine, "MX");

MY.copy_from_eigen(Y); MY.put(_engine, "MY");

string plot_code = "MX, MY";

string code;

#define EVL_CODE(_ARG0,_ARG1) code = var_plot_code(nm##_ARG0, nm##_ARG1); if(code != ""){ plot_code += ", " + code;}

code = var_plot_code(nm0, "");

if (code != ""){

plot_code += ", " + code;

EVL_CODE(1, 2);

EVL_CODE(3, 4);

EVL_CODE(5, 6);

EVL_CODE(7, 8);

EVL_CODE(9, 10);

EVL_CODE(11, 12);

EVL_CODE(13, 14);

}

else{

EVL_CODE(0, 1);

EVL_CODE(2, 3);

EVL_CODE(4, 5);

EVL_CODE(6, 7);

EVL_CODE(8, 9);

EVL_CODE(10, 11);

EVL_CODE(12, 13);

}

#undef EVL_CODE

plot_code = "plot(" + plot_code + ");";

cout <

exec(plot_code);

return 0;

}

// line_spec : "LineStyle" + "Marker" + "Color", e.g. "-or"

// for line

// "LineStyle" = {"none", "-", ":", "-."}

// "LineWidth" = 0.5

// "Color" = {[0 0.4470 0.7410] (default) | RGB triplet | {y,m,c,r,g,b,w,k} | 'none'}

// for Marker

// "Marker" = {"none", "o", "+", "*", ".", "x", "s", "d", "^", "v", ">", "

// "MarkerEdgeColor" = 'auto' (default) | 'none' | RGB triplet | {y,m,c,r,g,b,w,k}

// "MarkerFaceColor" = 'auto' (default) | 'none' | RGB triplet | {y,m,c,r,g,b,w,k}

// "MarkerSize" = 6

templateint plot_mask(const TMatX &X, const TMatY &Y, const TMask &mask,

string nm0  = "",

string nm1  = "", string nm2  = "",

string nm3  = "", string nm4  = "",

string nm5  = "", string nm6  = "",

string nm7  = "", string nm8  = "",

string nm9  = "", string nm10 = "",

string nm11 = "", string nm12 = "",

string nm13 = "", string nm14 = ""

){

MatArray MX, MY, MS;

MX.copy_from_eigen(X); MX.put(_engine, "MX");

MY.copy_from_eigen(Y); MY.put(_engine, "MY");

MS.copy_from_eigen(mask); MS.put(_engine, "MS");

string plot_code = "MX(MS>0), MY(MS>0)";

string code;

#define EVL_CODE(_ARG0,_ARG1) code = var_plot_code(nm##_ARG0, nm##_ARG1); if(code != ""){ plot_code += ", " + code;}

code = var_plot_code(nm0, "");

if (code != ""){

plot_code += ", " + code;

EVL_CODE(1, 2);

EVL_CODE(3, 4);

EVL_CODE(5, 6);

EVL_CODE(7, 8);

EVL_CODE(9, 10);

EVL_CODE(11, 12);

EVL_CODE(13, 14);

}

else{

EVL_CODE(0, 1);

EVL_CODE(2, 3);

EVL_CODE(4, 5);

EVL_CODE(6, 7);

EVL_CODE(8, 9);

EVL_CODE(10, 11);

EVL_CODE(12, 13);

}

#undef EVL_CODE

plot_code = "plot(" + plot_code + ");";

cout <

exec(plot_code);

return 0;

}

string var_plot_code(string nm, string var){

boost::trim(nm); boost::trim(var);

if (nm == ""){

return "";

}

string code = "'" + nm + "'";

if (var == ""){

return (nm[0]  'Z') ? code : "";

}

if (nm == "LineStyle" || nm == "Marker"){ // string

// 'LineStyle', '-'

return code + ", '" + var + "'";

}

if (nm == "LineWidth" || nm == "MarkerSize"){ // positive number

// 'LineWidth', 0.5

return code + ",  " + var;

}

if (nm == "Color" || nm == "MarkerEdgeColor" || nm == "MarkerFaceColor"){

if (var[0] == '['){

return code + ",  " + var;

}

else{

return code + ", '" + var + "'";

}

}

return "";

}

int exec(string cmd){

return engEvalString(_engine, cmd.c_str());

}

private:

Engine *_engine;

};

Matlab mbeng;

int main(int argc, char** argv){

// random circles

Eigen::ArrayXXf data;

data = data.Random(1000, 2);

//mbeng.exec("figure(1); clf;");

mbeng.plot(data.col(0), data.col(1), "o", "MarkerFaceColor", "[0,0,0]", "MarkerEdgeColor", "[0,0,0]");

mbeng.exec("axis tight;");

// different colors

int K = 4;

Eigen::ArrayXXi clid;

clid = Eigen::abs(clid.Random(1000, 1));

for (int i = 0; i 

clid(i, 0) = clid(i, 0) % K;

}

mbeng.exec("figure(2); clf;");

for (int k = 0; k 

string colors = rndcolor();

mbeng.plot_mask(data.col(0), data.col(1), (clid == k), "o", "MarkerFaceColor", colors, "MarkerEdgeColor", colors, "MarkerSize", "5");

mbeng.exec("hold on;");

}

mbeng.exec("hold off;");

mbeng.exec("axis tight;");

// plot line

Eigen::ArrayXf X;

Eigen::ArrayXf Y;

X = X.LinSpaced(30,-3.1415926f, 3.1415926f);

Y = X.sin()*X.cos();

mbeng.exec("figure(3);");

mbeng.plot(X, Y, "LineStyle", "-.", "Marker", "o", "MarkerSize", "5", "MarkerFaceColor", "[0,1,0]");

mbeng.exec("axis tight;");

return EXIT_SUCCESS;

}

d168785911de80d2ec0757f0181fb4f1.png#include#include#include#include#includeusing namespace std;

#include#includeclass MatArray

{

public:

MatArray() : _data(NULL){}

MatArray(size_t irows, size_t icols){

resize(irows, icols);

}

MatArray(const MatArray &obj){

if (obj._data){

_data = mxCreateDoubleMatrix(obj.rows(), obj.cols(), mxREAL);

memcpy(this->ptr(), obj.ptr(), sizeof(double)*rows()*cols());

}

else{

_data = NULL;

}

}

~MatArray(){ mxDestroyArray(_data); _data = NULL; }

inline size_t rows() const { return _data ? mxGetM(_data) : 0; }

inline size_t cols() const { return _data ? mxGetN(_data) : 0; }

inline double* ptr() const { return _data ? mxGetPr(_data) : NULL; }

bool resize(size_t irows, size_t icols){

if (!_data){

_data = mxCreateDoubleMatrix(irows, icols, mxREAL);

return (_data != NULL);

}

if (rows() == irows || cols() == icols){

return true;

}

mxDestroyArray(_data);

_data = mxCreateDoubleMatrix(irows, icols, mxREAL);

return (_data != NULL);

}

int put(Engine *ep, const char* var_name){

return engPutVariable(ep, var_name, _data);

}

templatevoid copy_from_eigen(const EigenMat &emat){

if (emat.rows()*emat.cols() == 0){

mxDestroyArray(_data); _data = NULL;

}

resize(emat.rows(), emat.cols());

for (int c = 0; c 

for (int r = 0; r 

(*this)[r + c*(int)(emat.rows())] = emat(r, c);

}

}

}

inline double& operator[](int i){

return ptr()[i];

}

private:

mxArray *_data;

};

string rndcolor(){

string color = "[";

color += to_string((rand() % 256) / 255.) + ",";

color += to_string((rand() % 256) / 255.) + ",";

color += to_string((rand() % 256) / 255.) + "]";

return color;

}

class Matlab

{

private:

Matlab(const Matlab &obj){}

public:

Matlab(){

_engine = engOpen(NULL);

if (!_engine){

cerr <

}

else{

cout <

}

}

~Matlab(){

// if you are testing algorithm, you are encouraged to keep the line below bing committed.

//engClose(_engine); _engine = NULL;

}

templateint plot(const TMatX &X, const TMatY &Y, string line_spec = "", int figure_id = 1, bool hold_on = false){

MatArray MX, MY, ID;

MX.copy_from_eigen(X); MX.put(_engine, "MX");

MY.copy_from_eigen(Y); MY.put(_engine, "MY");

ID.resize(1, 1); ID[0] = figure_id; ID.put(_engine, "ID");

string plot_code = " figure(ID); plot(MX, MY";

if (line_spec != ""){

plot_code = plot_code + "," + line_spec;

}

plot_code += ");";

plot_code += hold_on ? "hold on;" : "hold off;";

return engEvalString(_engine, plot_code.c_str());

}

templateint plot(const TMatX &X, const TMatY &Y, const TMatC &C, int K, int figure_id = 1, int marker_size = 5, string line_and_marker = "o"){

MatArray MX, MY, MC, ID;

MX.copy_from_eigen(X); MX.put(_engine, "MX");

MY.copy_from_eigen(Y); MY.put(_engine, "MY");

MC.copy_from_eigen(C); MC.put(_engine, "MC");

ID.resize(1, 1); ID[0] = figure_id; ID.put(_engine, "ID");

exec("figure(ID); clf;");

for (int k = 0; k 

string rdc = rndcolor();

exec(string("idx = MC==") + to_string(k) + ";");

exec("plot(MX(idx), MY(idx), '" + line_and_marker + "', 'MarkerEdgeColor', " + rdc + ",'MarkerFaceColor'," + rdc + ", 'MarkerSize'," + to_string(marker_size) + "); hold on;");

}

exec("hold off;");

return 0;

}

templateint plot(const TMatX &X, const TMatY &Y, int figure_id = 1, int marker_size = 5, string line_and_marker = "-"){

MatArray MX, MY, ID;

MX.copy_from_eigen(X); MX.put(_engine, "MX");

MY.copy_from_eigen(Y); MY.put(_engine, "MY");

ID.resize(1, 1); ID[0] = figure_id; ID.put(_engine, "ID");

string rdc = rndcolor();

exec("figure(ID); clf;");

exec("plot(MX, MY, '" + line_and_marker + "', 'MarkerEdgeColor', " + rdc + ",'MarkerFaceColor'," + rdc + ", 'MarkerSize'," + to_string(marker_size) + "); hold on;");

exec("hold off;");

return 0;

}

int exec(string cmd){

return engEvalString(_engine, cmd.c_str());

}

private:

Engine *_engine;

};

#if 1

int main(int argc, char** argv){

Matlab mbeng;

// random circles

Eigen::ArrayXXf data;

data = data.Random(1000, 2);

mbeng.plot(data.col(0), data.col(1), 1, 5, "o");

mbeng.exec("axis tight;");

// different colors

int K = 4;

Eigen::ArrayXXi clid;

clid = Eigen::abs(clid.Random(1000, 1));

for (int i = 0; i 

clid(i,0) = clid(i,0) % K;

}

mbeng.plot(data.col(0), data.col(1), clid, K, 2);

mbeng.exec("axis tight;");

// plot line

Eigen::ArrayXXf X(1000,1);

Eigen::ArrayXXf Y(1000,1);

float fpi = 3.1415926f;

float sstep = fpi*2 / 1000.f;

for (int i = 0; i 

X(i, 0) = -3.1415926f + i*sstep;

Y(i, 0) = sin(X(i,0))*cos(X(i,0));

}

mbeng.plot(X, Y, 3, 5, " - ");

mbeng.exec("axis tight;");

return EXIT_SUCCESS;

}

#endif

跑一下:

b694cc59b52fde004b61ab0c13bccd8a.png#include#include#include#include#include#includeusing namespace std;

#include#includeclass MatArray

{

public:

MatArray() : _data(NULL){}

MatArray(size_t irows, size_t icols){

resize(irows, icols);

}

MatArray(const MatArray &obj){

if (obj._data){

_data = mxCreateDoubleMatrix(obj.rows(), obj.cols(), mxREAL);

memcpy(this->ptr(), obj.ptr(), sizeof(double)*rows()*cols());

}

else{

_data = NULL;

}

}

~MatArray(){ mxDestroyArray(_data); _data = NULL; }

inline size_t rows() const { return _data? mxGetM(_data):0; }

inline size_t cols() const { return _data? mxGetN(_data):0; }

inline double* ptr() const { return _data? mxGetPr(_data):NULL; }

bool resize(size_t irows, size_t icols){

if (!_data){

_data = mxCreateDoubleMatrix(irows, icols, mxREAL);

return (_data != NULL);

}

if (rows() == irows || cols() == icols){

return true;

}

mxDestroyArray(_data);

_data = mxCreateDoubleMatrix(irows, icols, mxREAL);

return (_data != NULL);

}

int put(Engine *ep, const char* var_name){

return engPutVariable(ep, var_name, _data);

}

templatevoid copy_from_eigen(const EigenMat &emat){

if (emat.rows()*emat.cols() == 0){

mxDestroyArray(_data); _data = NULL;

}

resize(emat.rows(), emat.cols());

for (int c = 0; c 

for (int r = 0; r 

(*this)[r + c*emat.rows()] = emat(r, c);

}

}

}

inline double& operator[](int i){

return ptr()[i];

}

private:

mxArray *_data;

};

class Matlab

{

private:

Matlab(const Matlab &obj){}

public:

Matlab(){

_engine = engOpen(NULL);

if (!_engine){

cerr <

}

else{

cout <

}

}

~Matlab(){

// if you are testing algorithm, you are encouraged to keep the line below bing committed.

//engClose(_engine); _engine = NULL;

}

templateint plot(const TMatX &X, const TMatY &Y, string line_spec = "", int figure_id = 1, bool hold_on = false){

MatArray MX, MY, ID;

MX.copy_from_eigen(X); MX.put(_engine, "MX");

MY.copy_from_eigen(Y); MY.put(_engine, "MY");

ID.resize(1, 1); ID[0] = figure_id; ID.put(_engine, "ID");

string plot_code = " figure(ID); plot(MX, MY";

if (line_spec != ""){

plot_code = plot_code + "," + line_spec;

}

plot_code += ");";

plot_code += hold_on ? "hold on;" : "hold off;";

return engEvalString(_engine, plot_code.c_str());

}

int exec(string cmd){

return engEvalString(_engine, cmd.c_str());

}

private:

Engine *_engine;

};

string rndcolor(){

string color = "[";

color += to_string((rand() % 256) / 255.) + ",";

color += to_string((rand() % 256) / 255.) + ",";

color += to_string((rand() % 256) / 255.) + "]";

return color;

}

int main(int argc, char** argv){

Eigen::MatrixXf data;

srand((unsigned int)time(0));

data = data.Random(1000, 2);

Matlab mateng;

//mateng.exec("clear all; close all;");

mateng.plot(data.col(0), data.col(1), string("'s',") + "'MarkerEdgeColor'," + rndcolor() + ",'MarkerFaceColor'," + rndcolor() + ", 'MarkerSize', 5", 1, true);

return EXIT_SUCCESS;

}

执行一下!看看结果!

c274e3ac8aca84b143aec9b38df28dbd.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java args_Java命令行界面(第2部分):args4j

java args在上一篇文章中 &#xff0c;我研究了使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中&#xff0c;我将使用另一个库args4j进行相同的操作。 args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望…

apache camel_Apache Camel中的短重试与长重试

apache camel《骆驼设计模式》一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践。 每种模式都基于真实的用例&#xff0c;并提供了Camel特定的实现细节和最佳实践。 为了让您有这本书的感觉&#xff0c;以下是该书的重试模式摘录&#xff0c…

mega5安装包_[MEGA DEAL] 2017年完全Java捆绑包(95%折扣)

mega5安装包深入了解编程奥德赛&#xff08;58小时&#xff01;&#xff09;&#xff0c;进入最常用的编程语言 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的2017 Complete Java Bundle 仅…

matlab计算微分ppt,matlab-ch013(数值计算-微积分)20090923.ppt

matlab-ch013(数值计算-微积分)20090923.ppt 第13讲 数值计算 —微积分,张建瓴,13.1 数值积分,在工程教学和应用中&#xff0c;除了进行数据逼近外&#xff0c;还要求逼近曲线下面的面积&#xff0c;这就是积分问题。,一、数值积分方法,典型的数值积分方法有&#xff1a;用常数…

JDK 9中不推荐使用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 &#xff0c;我讨论了JDK 9中 Deprecated批注中对forRemoval&#xff08;&#xff09;和since&#xff08;&#xff09;可选元素&#xff08;方法&#xff09;的添加 。 我在那篇文章中说&#xff1a;“在Java SE API上应用新的…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中&#xff0c;很多企业都会遇到一个共同问题&#xff1a;重复建设基础功能&#xff0c;耗费大量时间和资源。为解决这一难题&#xff0c;WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发&#xff0c;如IM&#xff08;即时通讯&#xf…

linux在oracle新建表,Oracle创建表及管理表

1. Oracle表的创建及管理创建表包括三个要素&#xff0c;表名&#xff0c;列名&#xff0c;数据类型。每个表都有对应不同的列&#xff0c;每个列都有唯一对应的数据类型。常用数据类型简介&#xff1a;数据类型描述CHARACTER(n)字符/字符串。固定长度 n。INTEGER(p)整数值(没有…

Linux 命令之 top -- 实时显示进程动态/查看进程信息

文章目录介绍常用选项交互命令参考示例示例 1&#xff1a;直接输入命令 top 就可以动态显示进程信息统计参数信息详解进程属性说明&#xff08;即进程列表的字段说明&#xff09;其它1.在 top 基本视图中&#xff0c;按键盘数字 1 可以监控每个逻辑 CPU 的状况2.敲击键盘 b&…

oracle同步恢复目录,Oracle创建恢复目录(catalog)

Oracle创建恢复目录(catalog)&#xff0c;在catalog数据库上创建cat用户的表空间。Oracle创建恢复目录1.在catalog数据库上创建cat用户的表空间SQL> create tablespace cat datafile /home/oracle/oradata/orcl/cat.dbf size 512M;2.创建cat用户SQL> Create user cat ide…

java登录界面命令_Java命令行界面(第3部分):jbock

java登录界面命令在本系列中有关使用Java进行命令行分析的前两篇文章中&#xff0c;我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中&#xff0c;我介绍了jbock &#xff0c;它是自我描述的“非常简单的CLI解析器”。 我在Java命令行解析中的帖子使用了一些示…

java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

java中转json字符串在Java应用程序中工作或进行JSON解析时&#xff0c;通常很常见的做法是从某些资源&#xff08;例如RESTful Web服务&#xff09;中复制粘贴JSON字符串&#xff0c;然后使用Jackson库解析JSON。 这是在Java中测试和学习解析JSON字符串的最快方法&#xff0c;但…

COLLATE oracle,Sql 中Collate用法

今天查询sqlite的时候需要不区分大小写&#xff0c;查了下文档&#xff0c;需要使用collate nocase.顺便学习下collate的用法。collate在sql中是用来定义排序规则的。排序规则其实就是当比较两个字符串时&#xff0c;根据某种规则来确定哪个比较大&#xff0c;是否相等。各个数…

jdeps_JDeps入门–分析项目的依赖关系

jdepsJDeps是Java依赖关系分析工具 &#xff0c;这是一个命令行工具&#xff0c;它处理Java字节码&#xff08;意味着.class文件或包含它们的JAR&#xff09;&#xff0c;并分析类之间静态声明的依赖关系。 可以用各种方式过滤结果&#xff0c;并可以将其汇总到包或JAR级别。 J…

要多大内存才满足_什么是延迟满足能力?“延迟满足”能力对孩子有多重要家长要清楚...

文丨饭饭妈记得去年过春节的时候&#xff0c;家里来了两个亲戚&#xff0c;他们分别有一个小孩&#xff0c;当时大家都在准备年夜饭。其中一份糯米团子准备好放在桌子上之后&#xff0c;亲戚家的两个小孩都非常想要吃&#xff0c;亲戚对孩子说&#xff1a;“你们现在不能吃&…

java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能

java端到端通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务。 自动发现的业务交易&#xff0c;动态基准&#xff0c;代码级诊断…

java jvm虚拟机_Java虚拟机(JVM)简介

java jvm虚拟机什么是JVM Java虚拟机&#xff08;JVM&#xff09;是使计算机能够运行Java程序的抽象计算机。 JVM有三个概念&#xff1a; 1.规格 2.实施 3.实例。 该规范是正式描述JVM实现要求的文档。 具有单一规范可确保所有实现都可互操作。 JVM实现是满足JVM规范要求的…

linux系统引导分区,揭秘Linux(二)——操作系统引导与硬盘分区

通过前面的介绍想必大家对Linux有了个基础的了解&#xff0c;那么各位肯定该说是不是要装操作系统了&#xff0c;对不起让各位失望了&#xff0c;这次所讲解的是Linux运行原理与硬盘分区&#xff0c;这是重中之重啊&#xff01;请一定要细细品读。为了更好地了解Linux系统的运行…

HTTP协议简介_请求消息/请求数据包/请求报文_响应消息/响应数据包/响应报文

文章目录HTTP 介绍请求数据包/请求消息/请求报文请求数据包解析响应数据包/响应消息/响应报文HTTP 介绍 概念&#xff1a;Hyper Text Transfer Protocol 超文本传输协议 传输协议&#xff1a;定义了客户端和服务器端通信时发送数据的格式 特点: 1.基于TCP/IP的高级协议 2.默认…

apache.camel_Apache Camel 2.20发布–新增功能

apache.camelApache Camel 2.20已于今天发布&#xff0c;并且像往常一样&#xff0c;我受命撰写有关此出色新版本及其亮点的博客。 该版本具有以下重点。 1&#xff09;Java 9技术预览支持 我们已经开始支持Java 9的工作&#xff0c;此版本称为技术预览。 源代码在Java 9上…

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法

操作无法完成(错误 0x000006ba)&#xff0c;Windows 11 PDF打印机无法使用解决办法 解决方式一 先重启一次电脑&#xff0c;看看是否可以解决问题。 解决方式二 重新启动 Printer Spooler 服务