当前位置: 首页 > news >正文

Java 的开发效率究竟比 C++ 高在哪里?

Java和c++的相似之处多于不同之处,Java吸收了C/C++的优点,但是丢弃了指针等容易使程序崩溃的内容,提升了语言的健壮性。

内存

两个例子,申请变量

Object a = new Object();
void * a = malloc(sizeof(void*));


对于java 来说
因为存在 垃圾收集器,申请的变量,放置在堆还是栈上,其实 可以不用那么在意,只有在做性能分析 , OOM 的时候才有用。
而对于C/C++ 来说

  • 你应该堆你申请的每一个直接都有个清晰的认知,申请一个字节就可以为何申请4个字节,
  • 申请的内存,何时释放
  • 赋值操作导致拷贝,从而发生内存的增加,如何避免 大内存的拷贝。
  • 如果 一个三方库,提供申请内存函数,理论上也会提供 销毁内存的回调,不要忘记调用

总的来说 C++程序员更关注 内存的布局 以及性能对于程序的影响

关于java好用的项目工具

IDE

主流的 Java 开发工具现在非 IntelliJ IDEA 莫属。前几年,可能 Eclipse 还能和 IDEA 一争高下,到了现在已经基本是 IDEA 的天下了。

如果你问我用 IDEA 到底哪最牛,我觉得有 3 点:

  • 代码智能提示,牛!
  • 代码自动生成,牛!
  • 代码调试,牛!

而这 3 点,恰恰就是能极大提高程序员开发效率的 3 点。所以建议做 Java 后端开发的程序员,可以优先考虑 IDEA 作为开发工具。

版本管理工具

对于项目中的代码版本管理工具,Git 已经处于垄断地位了,新项目的话不需要再考虑 SVN、CVS了。

之所以 Git 现在处于垄断地位,主要胜在 2 点:

  • Git 是分布式的,不会因为版本管理服务器崩溃导致完整的代码历史版本丢失。
  • Git 创建分支是非常廉价的操作,可以随意创建分支,从而使并行开发很容易落地。而 SVN、CVS 这些版本管理工具创建分支则非常笨拙,并行开发非常麻烦。

上述第 1 点大大提升了代码资产的安全可靠程度;第 2 点则完美适应当代的敏捷开发需求。也因此,Git 大行其道就不足为怪了。

构建工具Java 项目的构建工具现在是龙争虎斗,业内一般有两个选择:Maven 和 Gradle。

如果是后端的 Java 项目,那绝大部分用的还是 Maven 去构建项目。如果是前端的 Android 项目,则选择 Gradle。Gradle 本身要比 Maven 先进很多:它配置灵活,性能优秀,真的是个非常优秀的构建工具。那为什么在后端 Java 项目构建的时候,大部分用的还是 Maven 呢?

因为Gradle本身太过灵活了,这种灵活带来了两个和后端项目构建特性不太匹配的问题:

  • Gradle 因为灵活,所以用法规则多变,导致学习门槛过高——后端项目本身的构建流程,套路比较死板,变化非常少,所以不需要太多的构建特性、构建规则。也就是说,灵活本身引入的多种用法、规则、特性对后端项目意义不大,为了构建工具本身的使用,去投入时间学习,本身性价比不高。
  • 上面说了,后端项目本身的构建流程是比较套路化的,需要进行一些强约束,去保证这种套路的可靠与稳定。而 Gradle 因为本身比较灵活的配置规则,反而失去了 Maven 的那种强约束,这就很可能因为失去了约束,从而造成团队在使用 Gradle 的时候,出现各种冲突和潜在的错误,造成项目构建的不稳定,这对后端项目来说是得不偿失的。

 

02maven项目构建_哔哩哔哩_bilibili
03maven程序安装_哔哩哔哩_bilibili
04maven仓库类型_哔哩哔哩_bilibili
07maven的常用命令_哔哩哔哩_bilibili

以上有兴趣的朋友可以研究一下

相关文章:

  • python random应用实例 从可选池随机选取指定个数的元素并随机排序
  • 【Java成王之路】EE初阶第二十二篇 博客系统(页面设计)
  • 编译mtd-utils(使用uclibc编译)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • springboot网络安全考核平台设计毕业设计源码042335
  • 神经网络常用的训练方式,人工神经网络训练过程
  • WebSocket快速入门及基本使用
  • 牛视源码定制,抖音矩阵系统,别和谐啊、、、
  • 深度神经网络的可解释性,深度神经网络简单介绍
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • 海川QK1209 低压按键台灯充电 LED 驱动 IC- 昱灿电子
  • 受邀参加中日韩创新人才主题交流研讨会
  • 优炫软件董事长梁继良当选新一届北京市商会副会长
  • 5G与UWB定位技术融合的四种方式
  • 企业为什么难创新?5个常见的创新障碍
  • 网络传输文件的问题
  • python3.6+scrapy+mysql 爬虫实战
  • 【剑指offer】让抽象问题具体化
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • flask接收请求并推入栈
  • GraphQL学习过程应该是这样的
  • Java 23种设计模式 之单例模式 7种实现方式
  • js中的正则表达式入门
  • python学习笔记-类对象的信息
  • 编写符合Python风格的对象
  • 测试开发系类之接口自动化测试
  • 树莓派 - 使用须知
  • 微信小程序实战练习(仿五洲到家微信版)
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #{}和${}的区别?
  • #考研#计算机文化知识1(局域网及网络互联)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Python第六天)文件处理
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (五)关系数据库标准语言SQL
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)德国人的记事本
  • (转载)Linux网络编程入门
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Family_物联网
  • .htaccess配置常用技巧
  • .NET 4.0中的泛型协变和反变
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Core引入性能分析引导优化
  • .net mvc 获取url中controller和action
  • .net Signalr 使用笔记
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 解决重复提交问题
  • /bin/rm: 参数列表过长"的解决办法
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解