java中成员函数占用对象的内存空间吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中成员函数占用对象的内存空间吗相关的知识,希望对你有一定的参考价值。

成员函数也是函数,函数都是有地址的,所以函数是占用内存空间的,但函数由于是多对象共享的,所以函数不占用对象的内存地址,是放在代码段的 参考技术A 没有被回收是正确的。
虽然在方法exchange(int
a1,int
b1)中创建了新对象对象t
[其实t仅仅指向创建的对象],但因为"t2
=
t1.exchange(3,
4);
",即t2也指向了新创建的对象,因此新创建的对象不会被回收[因为t2指向它嘛]。
虽然变量t在方法exchange执行完之后被回收了,但t指向的对象(现在由t2指向),所以你所说的“临时对象[方法中新创建的对象]”其实仍然存在,且存在于jvm的堆中。

一个关于java的new对象的问题,以及怎么有效减少不必要的内存占用

假如我有十个类,而这十个类都有一个成员对象a,而且这十个类中的成员对象是一样的,请问我可以选择再开发一个类,里面new一个对象a,然后再在另外十个类中通过赋值的方法把该类中的a赋值给成员对象a,而不需要在十个对象中new十个成员对象a来赋值的方法。请问这样子做,可以有效减少不必要的内存占用吗?
还有一个问题就是关于静态变量初始化问题,如果我要引用数学类中Math.PI,那么是在使用的时候装载该静态量到内存中吗?还是在其它什么时候装载。看了一个关于new对象的文章,文章中说new对象之后就会装载该对象的静态变量。而类中的静态变量不是可以直接引用,而不需要new出来就可以用的吗?也就是说问下究竟静态成员变量是什么时候装载到内存中的?

赋值有利于减少内存占用。
静态成员变量 和 静态方法一样,在类被载入中就已经加载到内存空间里了。
类被载入的可能性
1:是java.lang 在JVM初始化时就被载入
2:类的某个子类初始化
3:存在于某个初始化的类的import中(例如使用java.sql.* 就会浪费空间,但是对于复杂的sql应用则可以提高运行速度)
等等
java本来就不是内存优化的好语言。
java在内存优化上的优势在于自动和手动 回收机制的配合。就是 我想优化就优化,不优化系统也会帮我优化。
参考技术A 你说的这个办法是可以的,只要成员对象a可以被你定义的类访问,或者提供访问成员a的接口就可以
静态变量是java虚拟机在程序运行的时候装载到内存中的,
参考技术B 可以考虑把对象a设置为单例的,但是同时你也要考虑单例情况下的并发处理。
Math.PI是一个常量,在类加载的准备阶段就会被分配到常量池的内存中,如果单单是使用Math.PI是不会产生实例对象的,并未对一个Math类的实例进行初始化构造。

以上是关于java中成员函数占用对象的内存空间吗的主要内容,如果未能解决你的问题,请参考以下文章

c++ 之 内存模型:对象篇

java类中成员变量初始化后存放在堆内存中还是栈内存中?

Java类的实例化对象成员在内存空间怎么分配,调用构造函数又是在内存中怎么分配

类成员函数中定义的的static变量的内存是怎么分配的?

对象指针

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合