linux java c++,Java C++ 服务比较
1、内存占用,C++占优:jvm的垃圾回收原理下,old区只有到70%才会回收,否则系统为了效率,不会强制做fullgc,因此假如一开始分配了 -xms = xmx = 2g, -xmn = 512m的情况下,整个服务占用内存很容易达到1g以上。 而C++写的服务,由于上次应用自己控制内存,用完马上释放,因此内存占用非常小。 比如apache一个进程常常只占据几十M内存。
2、底层功能应用,C++占优: C++通过调用操作系统底层API,可以很方便的利用系统提供的更多功能。Java由于为了跨平台,jdk API的限制,很多操作系统的功能被阉割了。
例如:
a、fork,对于C++写的程序,fork是一个很又有的功能。例如redis通过fork出子进程,进行copy on write的数据持久化。apache通过动态fork和kill子进程,更弹性的提供高并发服务。并且通过fork,可以防止一个进程被杀后,立即fork出备份进程,防止服务在主机上整体crash。Java也可以通过Runtime.exec(cmd)执行命令生成新的Java进程,但是只是启动了一个全新的Java进程,并不是fork,并不能复制父进程中的数据。
b、mmap, C++通过内存映射,可以很方便的在不同进程中通信。而Java则很难做到这点。Java只能走本地socket进行通信。
c、管道:C++进程通过管道机制,可以在不同进程间形成数据通道,很方便的相互通信和配合完成功能。
d、文件锁:对于不同进程之间的共享锁机制
e、还是fork,因为fork后,父子进程共享内存、文件描述符,所以多个apache才能监听在一个端口上。这个对于jboss是不可能的。
总之,Java由于jdk API的限制,由于单进程的限制,上层应用无法获取很多进程级别的功能。
3、开发,Java占优:Java的内存处理、越界异常监听、指针地址不可见,使得整个语言非常的安全,程序员不用太过关注内存、指针问题导致整个进程crash的问题,更高效的关注上层业务逻辑的开发就好。Java语言的跨平台性不需要太多关注不同平台的函数差异性。Java的堆栈打印可以很方便的定位问题。
4、程序效率,C++占优:例如对ssl的处理,openssl明显比jsse高效不止一个量级,并且jsse在处理ssl时会造成大量内存零时对象,占用大量内存,从而使得jvm因为高内存占用后不停做gc,消耗了jvm的系统资源。
5、反射, classloader。 Java的proxy机制,spring框架,最底层上必须依赖这些技术。 Java通过反射、classloader技术,将整个框架的灵活性和动态性大大超过了C++程序。理由是Java语言最终是编译为bytecode到jvm容器中运行,所以还是语言可控的。而C++编译,link完之后,就只是一个写死的二进制程序了,最多通过lib技术将一些函数放到外面共用,但语言本身,程序本身,已经定死了,不可能像Java那样,通过一个字符串动态创建一个类。
linux java c++,Java C++ 服务比较相关推荐
- [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务
在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...
- linux停止java定时任务,linux定时任务生产java服务无法执行问题案例
我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器 于是就在crontab里配置了如下内容: * * - root /usr/local/bin/resin_re ...
- java linux 管理系统_用Java开发一个本地服务管理软件
使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...
- 在Unix/Linux上令(java)JVM支持中文输出
在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如 果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管 ...
- 优秀博客链接(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM 深度/机器学习 AI opencv nlp)
pudn 阿甘兄 前端 服务端 底层 移动端 大数据 云计算 AI 培训机构的课程差不多就这一套了 大数据 AI NLP 高等数学 LeetCode.<数据结构与算法之美>学习笔记.AI ...
- linux常用命令 java,Java工程在Linux常用命令
Java Web工程 在Linux下操作常用命令 cd ../ 退出当前目录,前往父文件夹 cd ezoffice 进入ezoffice文件夹 ls 查看目录 ps -ef|grep java 查看J ...
- linux java version 版本不对,linux JAVA_HOME和 java -version不匹配
~/.bashrc 中更新了jdk, JAVA_HOME 起效果了,但是java -version还是老的. 原因是/usr/bin/java 和usr/bin/javac是一个链接,得改. 使用 ...
- linux是否安装java环境,linux是否安装java环境
linux是否安装java环境 [2021-02-11 10:02:15] 简介: 服务器 Tomcat是基于java语言的web服务器软件,本文主要介绍如何在centos7.5上配置java环境并 ...
- linux中启动 java -jar 后台运行程序
ps -ef | grep java 查询java 端口占用 linux中启动 java -jar 后台运行程序 直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉. ...
- java -jar 指定端口_「Linux命令」-Java程序员需要掌握的10个命令
作为服务端开发的同学,经常会与linux服务器打交道,一些用的命令必须要掌握. 1.top命令-观察服务端负载情况 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况 ...
最新文章
- Python使用matplotlib可视化发散型条形图、发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图、并按照大小排序区分数据(Diverging Bars)
- [摘录]第二部分 战略决策(2)
- 集合 判断是否为同一元素 总结
- Openfiler 排错
- 无线可穿戴产品致胜设计六大策略
- QT学习:线程等待与唤醒
- 【发现问题】Java中PrintWriter和BufferedWriter的区别
- java 反射 proper_JAVA提高四:反射基本应用
- 强制应用 AMP 工具,开发者欲“封杀” Google!
- 程序中的@Override是什么意思?
- poj 2195(KM求最小权匹配)
- miniprogrampatch 提供 watch 和 computed 特性
- 2022-2028年中国电子政务行业投资策略探讨及市场规模预测报告
- SQLite数据库可视化工具【SQLiteStudio】的下载及安装
- HTML插入Flash的全兼容完美解决方案-SWFObject
- ubuntu18.04双系统卸载并重装
- openStack开源云repo db local or on-line 实战部署之Ruiy王者归来
- 微型计算机使用的键盘shift,微型计算机使用的键盘中,shift键称为什么
- 交换机路由器端口配置
- 这款开源工具绝了!!!