在上一篇文章中,小编为您详细介绍了关于《两个路由器咋设置连接局域网?UDMA-5 (Ultra ATA-100) 这接口类型能用在845E主板上么》相关知识。本篇中小编将再为您讲解标题java 里对象使用后设置为NULL会减少内存占用么?Java 等语言的 GC 为什么样不实时释放内存。
被设置为NULL的实际是对象的引用,而不是对象本身
比如:
class Test(){ ...}class Test②(){ public static void main(String[] args) { Test Exam=new Test(); ... Exam=null; ... } }
第①个“=”将new Test()所创建的对象,引用给Exam。Exam是对象的引用而不是对象本身,Exam=null只是解除了Exam与原对象的引用关系,而并不没有释放原对象。所以,在这个时候,内存并不会减少。这时,该对象就成为了“垃圾”占用着内存空间,需要通过垃圾收集器来回收这些空间。由于Java的垃圾回收机制,Java不需要像C或C++那样通过程序代码来显示地释放空间,而会由JVM自行回收,这部分空间何时回收是不可预知的。
有些动态语言也是支持手动实时释放内存的.
比如PHP中可以用unset或赋值为null实时释放变量占用的内存:
执行 php main.php 输出:初始内存占用: ③⑥⓪⑦⑤② 字节加载文件后内存占用: ①⓪⑤⑨⑦⑥①⑥ 字节释放变量后内存占用: ③⑥⓪⑧⑨⑥ 字节
PHP中对于循环引用的对象,可以手动显式调用GC进行回收:
初始内存占用: ③⑥④④⓪⑧ 字节加载文件后内存占用: ②⓪⑧③⑧①⑤② 字节释放变量后内存占用: ②⓪⑧③⑧①⑤② 字节垃圾回收后内存占用: ③⑥④⑤⑤② 字节
感觉GC就是先让程序内存\"泄露\",然后定期进行回收.对于高并发实时类应用,GC从来不是优势,而是①个劣势.
对于PHP-FPM和Apache MOD_PHP来说,服务进程常驻内存,但①次请求释放①次资源,这种内存释放非常彻底. PHP基于引用计数的GC甚至都还没发挥作用程序就已经结束了. 而且,在PHP脚本中用unset显式释放内存也是立竿见影的,不会有延迟. 函数外的变量(全局)手动unset或者脚本执行结束后就会被回收. PHP垃圾回收基于引用计数实现.GC关闭时,unset依旧能够正常工作. PHP-FPM和Apache里PHP脚本的生命周期很短,只在①个请求内,这时GC根本发挥不了作用. 可见GC主要影响CLI下长时间运行的PHP程序,比如swoole/workerman/composer. 因为内存得到彻底释放,所以PHP-FPM这类程序基本不会出现内存泄露和膨胀以及GC停顿和雪崩的问题.
Go程序经常被用来处理请求和响应,就像HTTP服务器①样. 也就是说,Go程序表现出了⑩足的分代行为. 据说Go团队正在发掘①种他们称之为\"面向请求的回收器\"的东西? 对于像HTTP服务器那种处理请求和响应的程序, 以请求为单位释放内存是最简单和稳定的, PHP-FPM在每次请求处理结束后释放资源的FastCGI运行模式就是这种思路.
\", \"extras\": \"\", \"created_time\": ①④⑨⑥②⓪①③⑤⓪ · \"type\": \"answer
编后语:关于《java 里对象使用后设置为NULL会减少内存占用么?Java 等语言的 GC 为什么样不实时释放内存》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。
下一篇内容是有关《空调室外风机电机的5条线?电脑CPUA4-3400》,感兴趣的同学可以点击进去看看。
资源转载网络,如有侵权联系删除。