这些语言之间的内存分配差别很大; 这是一个很大的主题,它不能简化为一个简单的问题,比如new
java中是否以"与C++类似的方式"工作.
为了给你一个简单的答案,它肯定是不以类似的方式工作,因为在Java中,你永远需要delete
.
为了让你更快乐,我还要补充一点,new
在Java中声称要比在C++中快得多,因为运行时不需要维护已分配和空闲块的链接列表,并且它不必搜索间隙足够大,可以容纳你需要的块.此外,它不会遇到C++可能遇到的内存碎片问题.
大多数时候,(如果你在充足的内存条件下运行,而且在现代我们通常都是这样),java运行时只是有一个指针指向分配的内存和空闲内存之间的边界,它需要一个副本指针,它会向指针添加您想要的字节数,并将副本返回给您.垃圾收集期间,后期开销很晚.
因此,总体而言,java往往比C++更快地为您提供内存,但由于频繁和复杂的垃圾收集,它会在整个运行时分散一些开销.这种开销是不可避免的,有些不可预测,但在现代机器上,它主要(但并不总是)难以察觉.
最重要的是,从一开始,Java旨在让程序员免于担心内存分配,并且在很大程度上它已经非常成功地做到了这一点.只有极其罕见,非常特殊的情况下,java程序员才需要担心预分配对象,实现自己的对象池等等.所有这些都是java中的非问题.