Ⅰ 北大青鸟java培训:Java垃圾回收的优点和原理
Java语言中一个显着的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。
由于有个垃圾回收机制,java课程http://www.kmbdqn.cn/发现Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。
垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
Ⅱ 对于垃圾对象程序员可以精确控制器回收时间
Java不需要程序员直接控制回收内存(不同于C和C++),其内存分配和回收都是由JRE在后台自动进行的。JRE提供一个后台线程进行检测和控制,一般在CPU空闲或内存不足时自动进行垃圾回收,自动释放不再被程序引用的对象,按照特定的垃圾回收算法。但程序员无法精确控制垃圾回收的时间和顺序等。
优点:提高编程效率;保护程序完整性。
缺点:开销影响性能。虚拟机必须跟踪程序中有用的对象,才能确定哪些是无用的对象。
特点:
1、垃圾回收只能回收内存资源,对其他物理资源,比如数据库连接,磁盘I/O等无能为力。
2、为了更快让垃圾回收,可以对无用对象引用变量设为null,暗示虚拟机可回收。
3、垃圾回收不可预知。可能定时/空闲/极限都有可能。可以System.gc方法建议回收,但仍有不确定性。除非finalize方法。
更新:16-3-22
建议回收:System.gc()或Runtime.getRuntime.gc()
通知系统进行垃圾回收,但系统是否进行垃圾回收依然不确定,但大部分时候,总会有一些效果,不会说程序的建议完全置之不理。
当系统要进行垃圾回收时,会调用默认的finalize()方法。但何时被调用时不确定的,不一定会执行。另外,任何类都可以重写finalize()方法,所以如果里面包含试图将可恢复对象重新变成可达状态的功能时会出现对象重新变成可达状态。
如果需要强制执行finalize()方法,在执行gc方法后,加上System.runFinalization()或Runtime.getRuntime.runFinalization()即可。
另外一些概念:
强引用:最常见,处于可达状态(包括常量池),不可能被回收。
软引用:SoftReference可能被回收。当系统内存足够时,不会被回收,只有当不足时才可能回收它。
弱引用:WeakReference不论内存是否足够,只要等到垃圾回收机制运行,总会被回收。
虚引用:类似于没有引用,不能单独使用,主要用于跟踪对象被垃圾回收的状态。
java
垃圾回收
点赞文章给优秀博主打call~
kef音响
精选推荐
广告
Ⅲ c/c++ 堆区程序员分配的内存,不释放,在程序结束时,系统一定会回收内存吗
程序结束是一定回收的,可以放心。内存溢出是如果你执行很久或者很大的程序,一直在申请不释放。或者比如说一个大项目,你写了一个模块,申请了一块内存不释放,别人调用你的模块调用了几千几万次,内存就溢出了。不过任何操作系统,程序结束了是肯定会回收的。
Ⅳ java的内存回收既可以由系统完成也可以由程序员完成吗
程序员对于GC只有建议权没有执行权,所以java的内存回收只能由系统完成。
Ⅳ java中的垃圾回收是什么意思
垃圾回收就是gc(gabage collection)。
java比c++的优点就是多了垃圾回收机制,程序员不用去关心垃圾的回收,系统会自动调用去回收内存。
一般我们想回收的时候只需要调用system.gc方法就可以了。系统会自己去调用destroy方法和其他的回收方法释放内存,节省内存空间。
Ⅵ java的内存回收机制是什么呢程序员能自己手动释放内存么能指定内存释放时间么
就是说java虚拟机会自动释放一些不必要的内存空间,比如一个引用,不在用到,一定时间后自己就释放了比如
User user;
定义了一个自定义的引用,下文不再用时,不必自己考虑删除
C++则不然,
int *p
要手动
delete p