我们有两个分类堆栈。当一个对象被创建时,对象的内存被存储在堆中。如果该类具有可以使用类名称调用的静态方法,该怎么办?如果没有创建对象,那么它将如何分配内存,如果它确实在哪里分配内存?静态方法内存分配
静态方法内存分配
回答
方法(即代码)不存储在对象中;一个类的所有对象将共享一个方法的代码。不管语言如何(Java,C++或几乎任何其他语言),任何方法的代码只有一个副本,不管是否是静态的。通常有一个特定的内存区域 - 即C++等本地语言中的代码段,或Java中的特殊堆区 - 加载代码的地方。
对象的确定内存与类一起创建。即在堆中只创建类的内存(java)只有当我们使用new运算符时,我们才能创建内存。但是对于像Math这样的类,我们不能实例化。在这种情况下,内存在哪里创建? – Harini
正如我所说(但我不确定你是否理解),代码不存储在对象中,所以这根本不是问题。事实上,它不存储在任何你可以到达的地方。它存储在堆的特殊部分的其他地方。 JVM从类文件中加载字节码,并以某种实现相关的方式对其进行转换,并使这些方法可用于您的程序。 –
@ user980918 java.lang.Math在运行时不需要太多的内存 - 我能想到的唯一一件事就是包含一个Random对象的静态变量。类的静态变量与'Class'对象一起存储在堆中。 (方法中的局部变量在堆栈中,与方法的静态无关。) –
它依赖于JVM,但静态字段通常存储在堆上的特殊对象中。 (你可以在堆转储中看到它)当ClassLoader被卸载时,它的类和静态“对象”/字段也被清除。
关于静态“对象”的唯一不同之处是您无法获得对它的引用。 (但你可以使用反射来访问字段)
- 1. 动态与静态内存分配
- 2. gfortran:强制静态内存分配
- 3. 静态变量内存分配
- 4. 内存分配静态变量在非静态类在.net
- 5. JavaScript类静态方法内存消耗
- 6. 静态方法内存消耗
- 7. 静态内联方法?
- 8. 线程的静态和动态内存分配
- 9. 在内核启动时分配(静态地)内存
- 10. 主函数内部大量内存的静态分配
- 11. 静态类内存分配存储在哪里C#
- 12. 内存中的静态方法和实例方法
- 13. java动态内存分配
- 14. RECV动态内存分配
- 15. 动态分配内存
- 16. 动态内存分配
- 17. 动态内存分配
- 18. 动态内存分配
- 19. 动态内存分配
- 20. Java内存分配解决方法
- 21. 虚拟方法和静态/动态分配
- 22. 静态类分配
- 23. 静态静态方法?
- 24. 动态分配和重新分配树中的内存算法
- 25. 静态链接囤积内存分配器
- 26. 计算静态分配内存的数量
- 27. 如何为静态变量分配内存?
- 28. 静态内存分配和可移植性
- 29. 不能在静态TLS块中分配内存
- 30. 类中的静态变量和内存分配及其使用
哪种语言? – NPE
这是什么分配内存的目的是为了? –
从他的评论中可以清楚看出它是Java,所以我添加了一个Java标记。 –