Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vs C++;内存分配_Java_C++ - Fatal编程技术网

Java Vs C++;内存分配

Java Vs C++;内存分配,java,c++,Java,C++,c中的示例++ Employee emp=new Employee(); 现在这里创建x字节来存储员工。和y字节是存储引用所必需的。因此需要x+y字节 C++中,由于没有垃圾回收,它的程序员有责任破坏对象。 员工emp2=emp 问题1:现在是否为emp2再创建一个(x+y)地址空间 在爪哇 它只是指向堆中的对象 问题2:那么这是否意味着如果在java中将同一个对象添加到ArrayList中,比方说100次,那么使用的内存仅用于在堆中存储对象的引用即只使用100*y+x的内存量?那么这是否意

c中的示例++

Employee emp=new Employee();
现在这里创建x字节来存储员工。和y字节是存储引用所必需的。因此需要x+y字节

C++中,由于没有垃圾回收,它的程序员有责任破坏对象。 员工emp2=emp

问题1:现在是否为emp2再创建一个(x+y)地址空间

在爪哇

它只是指向堆中的对象


问题2:那么这是否意味着如果在java中将同一个对象添加到ArrayList中,比方说100次,那么使用的内存仅用于在堆中存储对象的引用即只使用100*y+x的内存量?

那么这是否意味着如果在java中将相同的对象添加到ArrayList中,比方说100次,那么使用的内存仅用于在堆中存储对象的引用?i、 e仅使用100*y+x的内存量?-是。在集合中,只添加对实际对象(几乎总是在堆上)的引用


作为旁注,java有4字节引用,与体系结构无关(32位/64位)。

有函数调用局部变量的堆栈内存;堆栈作为嵌套的函数调用

这是变量的内存。在Java中,对对象的引用。对象本身存储在堆上,垃圾收集。数组也是Java中的一个对象。Java在堆栈上没有C结构。这是一个历史性的设计决定,把一切都简单化,作为“复杂”C++的继承者。

现在C++中,栈上有一个立即结构或数组(没有新的/MALOC)。然后需要一个复制构造函数,它将数据从一个空间推送到另一个空间(堆栈或堆)

有效的区别在于,在C中,可以有一个链表,其中每个节点都是fat,其中包含数据。 在Java中,假设一个
LinkedList
每个节点(一个堆对象)将包含一个额外的间接寻址,一个对T数据对象的引用。 数据可以在Java中共享,也可以在C中复制


从这个角度来看,您可以自己计算内存使用情况。我觉得有必要提到,Java良好的垃圾收集总体上比C的malloc/free要好。因此Java当然没有那么糟糕。

是的(到堆或堆栈,取决于您在哪里分配它…“C中的示例”?!不,那甚至不是C++(缺少A*)!当你还在挣扎2,不要尝试三种语言的比较。@ MalSalter在动作上更可能是java而不是C++()需要一个从雇员*的隐式转换。我意识到,几秒钟后,我的思维从C切换到C++模式,但仍然没有解析;问题1是否在C/C++中?。我很困惑,因为它似乎是用Java编写的:P您能添加一个不在堆上的示例吗?转义分析可能会导致对象的堆栈分配AVA的GC比手动内存管理更好吗?那要视情况而定。我觉得“在很多情况下”比“一般情况下”要好,直到现在我都同意这两种说法@重复数据消除器。然后在C中有了<代码> CaloC,C++中的堆栈数据。基准测试和现实世界的应用程序显示了令人难以置信的受欢迎的Java。主要原因是堆碎片、次优的
空闲
,以及——无可否认——一个利用了解处理器运行变量的热点编译器。C仍然可以更快,尤其是在不使用OOP的情况下。Linus Torvalds选择了C作为Linux,因为他发现OOP做得过火了。此时为True。更正:C
alloca
在堆栈上分配内存,而不是
calloc