简述java虚拟机的内存清理
2014-03-23 21:49
369 查看
java中的内存回收不像c中的必须使用。然而它有自己的一套执行方式:
先说下C。它在一定的内存空间里,创建了对象,当这些对象使用完后,将其使用空间强行地回收。
而java中是不需要coder去调用的,而是自行回收内存空间。而它通过这两种内部方式实现:
1、stop-and-copy 首先虚拟机会暂停执行的程序,将原来的内容进行复制到另外的一个堆中,在这个重新“粘贴”的过程,它将栈重新排序,重新指向对应的堆中。如果存在“垃圾”(所谓“垃圾”是没有指向栈的堆中对象),则将其清除。这种方式确实能够有效完成任务,但是如果程序的数据量大,而且对象多,“垃圾”比较少,这样的操作机制不能有很好的性能表现。所以需要另外一个方式来补救。
2、mark-and-sweep 此方法可以重字面上理解。从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。每当它找到一个活对象,则标记。标记后表示该方法将不对此对象进行回收。
先说下C。它在一定的内存空间里,创建了对象,当这些对象使用完后,将其使用空间强行地回收。
而java中是不需要coder去调用的,而是自行回收内存空间。而它通过这两种内部方式实现:
1、stop-and-copy 首先虚拟机会暂停执行的程序,将原来的内容进行复制到另外的一个堆中,在这个重新“粘贴”的过程,它将栈重新排序,重新指向对应的堆中。如果存在“垃圾”(所谓“垃圾”是没有指向栈的堆中对象),则将其清除。这种方式确实能够有效完成任务,但是如果程序的数据量大,而且对象多,“垃圾”比较少,这样的操作机制不能有很好的性能表现。所以需要另外一个方式来补救。
2、mark-and-sweep 此方法可以重字面上理解。从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。每当它找到一个活对象,则标记。标记后表示该方法将不对此对象进行回收。
相关文章推荐
- 简述Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)
- 深入理解JAVA虚拟机---JAVA虚拟机的内存划分
- Java虚拟机内存及调优工具
- Java虚拟机运行时内存区域
- 【学习笔记】Java虚拟机(六)内存分配与回收策略
- linux清理内存命令
- Java虚拟机:JVM内存分代策略
- Java虚拟机JVM内存分区及代码执行机制
- 定期清理QQ的5个文件夹,提升电脑内存速度
- 【Java虚拟机学习】内存区域
- Android 精进之简述 JVM 基础(二):Java内存区域与内存溢出异常
- Java虚拟机内存分区域与内存溢出异常
- Java虚拟机支持的最大内存限制
- Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
- linux运行一段时间后,内存清理
- Java虚拟机内存介绍
- 【JAVA学习】java虚拟机内存配置,-Xss256m -Xms512m -Xmx800m -XX:MaxPermSize=512m
- 简述性能优化tomcat配置(从内存、并发、缓存方面)优化及压力测试
- Java虚拟机(JVM)中的内存设置详解
- Java虚拟机学习 - 体系结构 内存模型