java垃圾处理机制(一)
来源:互联网 发布:智能手环要下什么软件 编辑:程序博客网 时间:2024/05/20 03:41
如果所java虚拟机是java的灵魂所在的话,java的垃圾处理机制应该就是jvm的灵魂了!网上也有许多关于java垃圾处理的文章,但是看别人讲的不如自己归纳总结。我就来一步步地剖析。
1.jvm的内存划分
1.方法区:方法区默认最大容量为64M,Java虚拟机会将加载的java类存入方法区,保存类的结构(属性与方法),类静态成员等内容。
2.堆:默认最大容量为64M,堆存放对象持有的数据,同时保持对原类的引用。可以简单的理解为对象属性的值保存在堆中,对象调用的方法保存在方法区。
3.栈:栈默认最大容量为1M,在程序运行时,每当遇到方法调用时,Java虚拟机就会在栈中划分一块内存称为栈帧(Stack frame),栈帧中的内存供局部变量(包括基本类型与引用类型)使用,当方法调用结束后,Java虚拟机会收回此栈帧占用的内存。
2.java内存溢出
1.数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象;
这种情况下大多数都是我们自己代码的问题了,最佳的方法就是写好代码。而在平时编码过程中减少使用或者规范使用递归。一般的,在良好编码的情况下要发生内存溢出也是很难的。
2.虚拟机不回收内存(内存泄漏);
一般JVM 调用 GC 的频度还是很高的,主要两种情况下进行垃圾回收:
当应用程序线程空闲;另一个是 java 内存堆不足时,会不断调用 GC ,若连续回收都解决不了内存堆不足的问题时,就会报 out of memory 错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。
根据 GC 的机制,程序的运行会引起系统运行环境的变化,增加 GC 的触发机会。
3.如何写好代码
1 、尽早释放无用对象的引用。好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为 null ,暗示垃圾收集器来收集该对象,防止发生内存泄露。
对于仍然有指针指向的实例, jvm 就不会回收该资源 , 因为垃圾回收会将值为 null 的对象作为垃圾,提高 GC 回收机制效率;
2 、我们的程序里不可避免大量使用字符串处理,避免使用 String ,应大量使用 StringBuffer ,每一个 String 对象都得独立占用内存一块区域;
3 、尽量少用静态变量,因为静态变量是全局的, GC 不会回收的;
4 、避免集中创建对象尤其是大对象, JVM 会突然需要大量内存,这时必然会触发 GC 优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
- java垃圾处理机制(一)
- java垃圾处理机制(二)
- java的垃圾处理机制
- java中的垃圾处理机制
- Java垃圾处理机制学习总结
- 核心机制之Java垃圾处理
- java垃圾处理机制(四)——垃圾回收算法
- Java内存管理和垃圾处理机制
- JAVA 垃圾处理
- java垃圾处理
- JAVA中垃圾处理,垃圾处理算法
- java垃圾处理机制(三)——JVM内存配置详解
- JVM_Java垃圾处理机制
- GC(垃圾处理机制)面试题
- GC(垃圾处理机制)面试题
- java gc的垃圾处理和内存分配
- JAVA事件机制(一)
- Java反射机制(一)
- NS3 ipv6例子代码测试和解析之test-ipv6.cc
- ZigBee组网(原理分析)
- Struts2 标签库讲解
- 常用mysql语句总结
- 设计模式学习笔记--模板方法(Template Method)模式
- java垃圾处理机制(一)
- 结构体、共用体
- IT技术名词详解
- UltraEdit 使用
- 暑期实习4月份笔试试题解答-Android 工程师
- Java设计模式之工厂模式
- Android 使用网页开发软件界面
- 生成一注双色球-c语言
- 四种android的Button监听