回答1:为什么
我们知道,就这2个来说,存放在ram里的数据位置,一般认为只有堆栈这两种,c++占优势的寄存器使用与ram无关,Java的常量池也只少部分在ram只读,大部分在rom里(除非非常庞大)
就栈来说,c++和java都是相似的功能,没有特别大的差异
最大的就在于对堆的处理了
java大概就是new一下就不管了(即使想管也没用啊),他的内存是随着线程的产生和消亡过程不断积累的,只有在gc认为需要清理内存的才会释放内存
c++不管是new还是malloc,大部分程序员应该都是手动用吧,他的内存只有在进行heap操作的时候会显著增加,释放后又平复下去
回答2:是不是利用率低
我认为不是的
这其实是一个应用环境和思路问题
跟你们家扔厨房垃圾一样,肯定是垃圾桶里积累一些垃圾后,打包一次扔掉,因为居家生活方便轻松为主
但是像洁净工厂和超3星厨房一样,垃圾是不能积累的,必须使用厨余粉碎之类的马上处理,因为高级厨房品质和服务为主
他们处理的菜品,就是内存。
java本身对内存的使用并不如c++那么细致,因为他侧重发挥的方向与c++就完全不同(关于面向对象,关于跨平台,等等等可以出好几本书,这里就不说了)
所以java对内存的要求就是,不影响的时候懒得管,影响的时候一次释放,万一来不及就内存溢出
而c++的要求就是,每一次都要合理释放,万一控制不住,未来肯定会内存溢出