java如何进行内存分配和管理
1、打开eclipse,创建一个java工程文件,并在src下创建类Main。
创建完后的工程目录如图。

2、Main.java的初始内容如图。

3、先介绍java是如何进行内存分配的。
java中申请内存分配是通过new关键字来实现的,用new关键字为对象申请内存呢空间后,jvm会自动为对象分配内存(在内存不溢出的情况下),而且会为每个对象的内存地址映射一个hash值。
如图代码是演示java中用new关键字申请内存空间。
在Main.java中加入main函数,在main函数中创建两个对象,并通过使用
System.identityHashCode()方法来输出对象分配的内存地址所映射的hash值。

4、通过java应用程序的方式运行Main.java,如图可以看到,控制台输出了两个不同的hash值,说明java为两个对象分配了两个内存空间。


5、接着介绍java是如何对内存进行管理的。
在java中存在垃圾回收机制,在程序运行的过程中会有一个GC线程在管理着内存。在演示内存管理前先介绍一下Object类的finalize()函数。Object类的编写者对finalize()函数的解释为:
Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.
当垃圾管理器(gc)认为某个对象没有更多的引用时,垃圾收集器就会调用finalize()方法。也就是说,当gc线程决定释放对象的内存空间时,finalize()方法会被调用。
6、由于内存的释放会调用到finalize()方法,所以在Main.java中重载finalize()方法。如图修改Main.java文件。
在Main类中重载finalize()方法。
在main函数中,将obj1设为null,即让obj1对象不存在引用,然后调用gc方法来释放内存。

7、修改完后再次运行Main.java文件,控制台输出如图。
从图中可以看到,没有引用的对象(obj1),在调用gc方法后,内存得到了释放,而存在引用的对象(obj2),内存并没有释放。

8、最后说一下,java中的内存分配最好由GC线程去调度,尽可能不要手动去管理内存。