# 1 楼答案 似乎我问,为什么Java中的对象只创建动态分配的内存(使用^ {CD1>}关键字),而不是用静态分配的内存创建(例如,在C++中)。如果(这是一个很大的如果)这就是问题的意思,你可以回答一些问题 在回答之前,必须注意问题的前提并非完全正确(你甚至可以说它是错误的)。Java对象不是严格动态创建的。如果转义分析可以证明引用没有转义给定的作用域,则可以对其进行编译,使其使用静态分配 鉴于上述情况,一个可能的答案是抽象。堆栈和堆(传统上分别与静态和动态内存相关联)实际上是实现细节(即使我们已经习惯了它们)。Java试图隐藏这一点,因此它没有给你静态或动态内存之类的术语来使用——它甚至没有给你内存,它给你对象 另一个答案(同样,给出了注释)是对象的真实使用。在现实世界场景中,很多时候,对象确实需要逃离其初始范围,使得动态分配成为唯一有效的候选对象
# 3 楼答案 这是一个非常开放的问题,需要一些上下文才能给出一个好的答案 它不是Java特有的,而是所有编程语言通用的。每个对象都可以是动态的,因为为对象分配的内存是在运行时从执行平台上可用的资源中分配的。即使是常量、静态类和类似概念,也只有在实际执行文件时才使用内存 静态对象可能存在于某些硬件硬编码值中,例如BIOS ot TPL模块的某些部分。此值是只读的-没有已知的方法更改对象的值 然而,这只是一个单一的答案,取决于我认为动态意味着什么。这是主观的,不同的人可能会想出其他有效的答案。对于面试来说,这不是一个好问题,除非给出一些额外的背景
# 4 楼答案 <> P>这个人可以指的是java不知道C++中的隐含对象创建,比如p> std::string string; 在C++中创建一个对象,而 String string; 只在Java中创建引用,但不创建对象(也不调用构造函数) 如果您对这个主题感兴趣,我建议您阅读更多关于Java内存模型的内容
# 1 楼答案
在回答之前,必须注意问题的前提并非完全正确(你甚至可以说它是错误的)。Java对象不是严格动态创建的。如果转义分析可以证明引用没有转义给定的作用域,则可以对其进行编译,使其使用静态分配
鉴于上述情况,一个可能的答案是抽象。堆栈和堆(传统上分别与静态和动态内存相关联)实际上是实现细节(即使我们已经习惯了它们)。Java试图隐藏这一点,因此它没有给你静态或动态内存之类的术语来使用——它甚至没有给你内存,它给你对象
另一个答案(同样,给出了注释)是对象的真实使用。在现实世界场景中,很多时候,对象确实需要逃离其初始范围,使得动态分配成为唯一有效的候选对象
# 2 楼答案
如果你直截了当地回答这个问题,我会说:
因此,您不必一次加载所有内容(在init fase上),并将其保存在内存中,直到应用程序/程序结束。这样可以更有效地使用内存
;-)
# 3 楼答案
这是一个非常开放的问题,需要一些上下文才能给出一个好的答案
它不是Java特有的,而是所有编程语言通用的。每个对象都可以是动态的,因为为对象分配的内存是在运行时从执行平台上可用的资源中分配的。即使是常量、静态类和类似概念,也只有在实际执行文件时才使用内存
静态对象可能存在于某些硬件硬编码值中,例如BIOS ot TPL模块的某些部分。此值是只读的-没有已知的方法更改对象的值
然而,这只是一个单一的答案,取决于我认为动态意味着什么。这是主观的,不同的人可能会想出其他有效的答案。对于面试来说,这不是一个好问题,除非给出一些额外的背景
# 4 楼答案
在C++中创建一个对象,而
只在Java中创建引用,但不创建对象(也不调用构造函数)
如果您对这个主题感兴趣,我建议您阅读更多关于Java内存模型的内容