1, c++中允许创建局部对象,局部对象在代码块执行完后自动释放
2, Java中部允许创建局部对象,只能通过new来创建对象
所以如果MyClass是一个类名的话
MyClass a;
这句话如果在c++中,那么它就创建了一个MyClass对象
而在Java中仅仅是声明了一个引用,它并没有创建对象
3, C++中如果用new来创建对象,那么程序员必须通过delete来释放对象,否则会造成内存泄露
4, Java中没有delete关键字,其释放对象依靠垃圾回收GC来实现;即程序员不必考虑对象用完后的释放问题,只需将指向该对象所有引用设置为null即可
5, Java中的垃圾回收并不是立即执行的,它是一个低优先级的操作
6, Java中的垃圾回收只与内存有关,即仅与new出来的对象有关;如果通过其他内存方法申请的内存并不能通过垃圾回收来释放,比如java调用的JNInative方法里用malloc申请的内存就靠垃圾回收来释放,什么时候释放呢?Java允许类里自己定义Finalize方法,该方法在类对象被垃圾回收前调用,这个函数通常用来清除非java内存方法创建的内存,即可以在该方法里调用相应的JNI函数来释放/free() malloc出来的内存
7, 关于gc的工作机制,根据jvm设计的不同,gc工作过程可能也不同。最常用的工作机制是:所有内存对象以有向图的方式存在,当不能达到该对象时即清除,即将不可达到的内存节点清除
8, 如果程序调用System.gc(),垃圾回收不一定会立即执行
