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++ 服务比较相关推荐

  1. [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务

    在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...

  2. linux停止java定时任务,linux定时任务生产java服务无法执行问题案例

    我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器 于是就在crontab里配置了如下内容: * * - root /usr/local/bin/resin_re ...

  3. java linux 管理系统_用Java开发一个本地服务管理软件

    使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...

  4. 在Unix/Linux上令(java)JVM支持中文输出

    在Unix/Linux上令(java)JVM支持中文输出 一.在Unix/Linux上令JVM支持中文输出 如 果用户使用的是UNIX的远程服务器,就会遇到中文字体在图像中输出的问题,特别是由于许多管 ...

  5. 优秀博客链接(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM 深度/机器学习 AI opencv nlp)

    pudn 阿甘兄 前端 服务端 底层 移动端 大数据 云计算 AI 培训机构的课程差不多就这一套了 大数据 AI NLP 高等数学 LeetCode.<数据结构与算法之美>学习笔记.AI ...

  6. linux常用命令 java,Java工程在Linux常用命令

    Java Web工程 在Linux下操作常用命令 cd ../ 退出当前目录,前往父文件夹 cd ezoffice 进入ezoffice文件夹 ls 查看目录 ps -ef|grep java 查看J ...

  7. linux java version 版本不对,linux JAVA_HOME和 java -version不匹配

    ~/.bashrc 中更新了jdk, JAVA_HOME 起效果了,但是java -version还是老的. 原因是/usr/bin/java   和usr/bin/javac是一个链接,得改. 使用 ...

  8. linux是否安装java环境,linux是否安装java环境

    linux是否安装java环境 [2021-02-11 10:02:15]  简介: 服务器 Tomcat是基于java语言的web服务器软件,本文主要介绍如何在centos7.5上配置java环境并 ...

  9. linux中启动 java -jar 后台运行程序

    ps -ef | grep java  查询java 端口占用 linux中启动 java -jar 后台运行程序 直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉. ...

  10. java -jar 指定端口_「Linux命令」-Java程序员需要掌握的10个命令

    作为服务端开发的同学,经常会与linux服务器打交道,一些用的命令必须要掌握. 1.top命令-观察服务端负载情况 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况 ...

最新文章

  1. Python使用matplotlib可视化发散型条形图、发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图、并按照大小排序区分数据(Diverging Bars)
  2. [摘录]第二部分 战略决策(2)
  3. 集合 判断是否为同一元素 总结
  4. Openfiler 排错
  5. 无线可穿戴产品致胜设计六大策略
  6. QT学习:线程等待与唤醒
  7. 【发现问题】Java中PrintWriter和BufferedWriter的区别
  8. java 反射 proper_JAVA提高四:反射基本应用
  9. 强制应用 AMP 工具,开发者欲“封杀” Google!
  10. 程序中的@Override是什么意思?
  11. poj 2195(KM求最小权匹配)
  12. miniprogrampatch 提供 watch 和 computed 特性
  13. 2022-2028年中国电子政务行业投资策略探讨及市场规模预测报告
  14. SQLite数据库可视化工具【SQLiteStudio】的下载及安装
  15. HTML插入Flash的全兼容完美解决方案-SWFObject
  16. ubuntu18.04双系统卸载并重装
  17. openStack开源云repo db local or on-line 实战部署之Ruiy王者归来
  18. 微型计算机使用的键盘shift,微型计算机使用的键盘中,shift键称为什么
  19. 交换机路由器端口配置
  20. 这款开源工具绝了!!!

热门文章

  1. 事务RFC(TRFC)原理和实战解析
  2. 物料管理的容差范围维护
  3. 使用Java调用以WSDL形式发布的web service
  4. SAP 错误日志的调查
  5. SAP-SAP预制凭证相关的表
  6. 打车APP大数据宰客套路多:苹果比安卓贵、熟客比新客贵
  7. 中国34城最全剖析:深圳、天津的短板与不足,何时才能补?
  8. 豆瓣9.2!为什么这款剧最能打动大家?真相都在数据里!
  9. 菲教驰骋在线外教市场,51Talk、阿卡索谁能攫取行业红利?
  10. java什么是局部变量,什么是java的局部变量,成员变量,全局变量?