`

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、文件锁:对于不同进程之间的共享锁机制

总之,java由于jdk API的限制,由于单进程的限制,上层应用无法获取很多进程级别的功能。


3、开发,java占优:java的内存处理、越界异常监听、指针地址不可见,使得整个语言非常的安全,程序员不用太过关注内存、指针问题导致整个进程crash的问题,更高效的关注上层业务逻辑的开发就好。java语言的跨平台性不需要太多关注不同平台的函数差异性。java的堆栈打印可以很方便的定位问题。


4、程序效率,c++占优:例如对ssl的处理,openssl明显比jsse高效不止一个量级,并且jsse在处理ssl时会造成大量内存零时对象,占用大量内存,从而使得jvm因为高内存占用后不停做gc,消耗了jvm的系统资源。



分享到:
评论

相关推荐

    java调用C++ webservice

    本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description Language)文件来实现这一目标。以下是关于这个主题的详细知识点: 1. **Web服务...

    C++代码转java工具

    标题“C++代码转Java工具”暗示了一个软件或服务的存在,它的功能是自动化C++源代码到Java源代码的转换。这种工具通常通过分析C++的语法结构,然后生成相应的Java代码来工作。然而,需要注意的是,由于C++和Java的...

    从java到c++,适合java程序员快速学习c++

    这篇文章旨在帮助 Java 程序员快速学习 C++,通过比较 Java 和 C++ 的区别,帮助读者快速理解 C++。以下是从 Java 到 C++ 的知识点总结: 数据类型和变量 * C++ 中的变量类型与 Java 相似,包括 int、double 等,...

    java c++ 通信之间的乱码解决方法

    Java和C++之间进行Socket通信时,可能会遇到乱码问题,主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C++在Windows XP环境下可能使用GBK编码。解决这个问题的关键在于确保数据在传输过程中保持正确的...

    C++转换JAVA工具

    然而,Java则以其“一次编写,到处运行”的特性,跨平台支持和强大的企业级框架受到青睐,特别适合大型分布式应用和Web服务。C++转换JAVA工具的出现,旨在弥合这两种语言之间的鸿沟。 转换工具的工作原理通常涉及...

    面向对象编程C++和Java比较教程

    本教程聚焦于C++和Java这两种广泛使用的OOP语言的比较,旨在帮助程序员在两者之间灵活转换。 C++,由Bjarne Stroustrup设计,起源于C语言,是C的增强版,具有底层控制能力和高性能。C++支持类、封装、继承、多态等...

    C++库封装JNI接口-实现java调用c++

    在跨平台的软件开发中,有时我们需要在Java和C++之间进行交互,这通常是由于性能需求、使用已有的C++库或特定硬件接口的原因。Java Native Interface (JNI) 是Java平台提供的一种机制,允许Java代码和其他语言写的...

    C++与java比较

    C++和Java是两种广泛应用的编程语言,它们都支持面向对象编程,但有着明显的差异,适合不同的应用场景。这里我们将深入探讨这两种语言的关键区别。 首先,Java的最大优势在于其跨平台能力,这得益于Java的“一次...

    Java转C++代码工具 J2C

    Java转C++代码工具J2C是一个专门用于将Java源代码转换为等效C++代码的工具。这个工具对于那些需要在不支持Java或者需要利用C++特定性能特性的环境中迁移Java项目的人来说非常有用。在深入探讨J2C之前,我们先理解...

    java与C++互通加解密

    本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...

    java c++互通的加密算法

    Java 和 C++ 之间的互通性在许多实际项目中都是至关重要的,特别是在跨平台的应用程序开发中。本主题探讨的是如何在 Java 和 C++ 中实现相同的加密算法,以便在这两个环境中可以无缝地交换加密数据。这里我们将专注...

    UML代码实现java和C++比较

    对类图用rose进行代码化,分两种语言,java和C++进行比较。全是自己跑出来的代码。

    C++调用Java方法

    Android Studio项目,此Demo实现Java调用C++函数,然后C++函数回调Java方法、纯C++直接调用Java方法,此为github地址链接

    Java c++ socket通信

    在实际应用中,Java和C++的Socket通信常用于分布式系统、微服务架构中,其中Java负责提供API或Web服务,而C++可能作为高性能计算或嵌入式系统的后台处理部分。 总结起来,Java和C++通过Socket进行通信,涉及到的...

    C++ Java异常处理比较

    本文将对C++和Java两种语言的异常处理机制进行深入的比较和分析,探讨它们的相似之处以及不同之处,以帮助开发者更好地理解和应用这两种语言。 首先,异常处理的基本目的是捕获并处理运行时错误,这些错误通常包括...

    android 的binder机制在java、c++层的实现

    `AppPayProvider`可能是一个实现了支付功能的服务,其在Java层定义了`IAppPayProvider`接口,并在C++层实现具体的支付逻辑。 1. 首先,`AppPayProvider`服务端需要在`onBind()`方法中返回`IAppPayProvider`的`...

    C++转Java工具

    然而,Java则是一种面向对象的、跨平台的编程语言,它的“一次编写,到处运行”特性使得它在企业级应用和网络服务中广泛应用。 JNI是Java平台提供的一种接口,它允许Java代码调用本地(非Java)代码,如C++或C,...

    非常好用java调用c++ dll文件demo

    Java调用C++ DLL文件是跨语言编程中的一个重要应用场景,特别是在既有Java代码库又有C++动态链接库的情况下。本文将详细讲解如何在Java程序中调用C++编写的DLL文件,以及一个可用的示例。 首先,理解Java与C++交互...

    c++ 转换 java c# 转换 java c++ 转换 c#

    本主题聚焦于“C++转换Java”和“C#转换Java”以及“C++转换C#”,这三个转换过程涉及到了不同的编程语言特性和挑战。 C++到Java的转换是一个复杂的过程,因为C++是一种静态类型的、编译式的、面向对象的语言,而...

    java/c++区别

    【Java和C++的区别】 Java和C++是两种广泛使用的编程语言,它们在设计目标、语法、内存管理和执行效率等方面存在显著差异。 (一) 序言 此文档旨在全面对比Java和C++,整合了网络上的众多资源,旨在帮助读者理解和...

Global site tag (gtag.js) - Google Analytics