Java内存管理(二、Java垃圾回收)
二、Java垃圾回收
1. JVM运行环境中垃圾对象的定义
一个对象创建后被放置在JVM的堆内存中,当永远不再引用这个对象时,它将被JVM在堆内存中回收。或 当对象在JVM运行空间中无法通过根集合(root set)到达时,这个对象就被称为垃圾对象。
2. 堆内存
* 在JVM启动时被创建;堆内存中所存储的对象可以被JVM自动回收,不能通过其他外部手段回收
* 堆内存可分为两个区域:新对象区和老对象区
-- 新对象区可分为三个小区:Eden区、from区、To区
Eden区用来保存新创建的对象,当Eden区中的对象满了之后,JVM将会做可达性测试,检测有哪些对象由根集合出发是不可达的,不可达的对象就会被 JVM回收,并将所有的活动对象从Eden区拷到To区,此时一些对象将发生状态交换,有的对象就从To区被转移到from区。
3. JVM中对象的生命周期
* 创建阶段(步骤)
-- 为对象分配存储空间
-- 开始构造对象
-- 递归调用其超类的构造方法
-- 进行对象实例初始化与变量初始化
-- 执行构造方法体
* 应用阶段
-- 特征:系统至少维护着对象的一个强引用;所有对该对象引用强引用(除非显示声明为其它引用)
-- 强引用
指JVM内存管理器从根引用集合出发,遍寻堆中所有到达对象的路径。当到达某对象的任意路径都不含有引用对象时,对这个对象的引用就被称为强引用。
当内存不足时,JVM宁愿抛出OutOfMemeryError错误使程序停止,也不会靠收回具有强引用的对象来释放内存空间
-- 软引用
它能实现cache功能,防止最大限度的使用内存时引起的OutOfMemory异常,在内存不够用的时候jvm会自动回收Soft Reference。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,java虚拟机就会把这个软引用加入到与之关联的引用队列中。
Java中提供软引用的包:java.lang.ref.SoftReference(后续详解)
软引用
实现cache功能,防止最大限度的使用内存时引起的OutOfMemory异常,在内存不够用的时候jvm会自动回收Soft Reference.软引用
相关文档:
import java.awt.*;
import java.awt.event.*;
public class TestFrame {
Frame fm = new Frame();
public void init(){
fm.setSize(300,300);
Button btn = new Button("ok");
fm.add(btn);
btn.addActionListener(ne ......
本文对 Java Debug Interface(JDI)及其使用进行了介绍,并通过实现一个多线程分析器的示例应用,演示了如何利用 JDI 开发自己的多线程调试程序。该示例分析器在独立于目标程序的前提下,以单个线程流为单位,帮助追踪记录多线程的执行过程信息。
多线程环境下的程序调试是让开发者头痛的问题。在 IDE 中通过添加断点的方 ......
附录A: Java编码规范
一、 Java命名的一般性指导
1. 类名首字母应该大写。属性(成员变量)、方法、对象变量以及所有标识符(如形式参
数、实际参数、局部变量)的首字母应小写,其中包含的所有单词都应紧靠在一起,而
且大写中间单词的首字母。
例如:类名:ThisIsAClassName 属性或方法名:thisIsMethodOrFieldName
......
刚才在做个测试时 删除文件老是失败...一直找不到原因.. file.delete();
总是返回false.
在网上找了半天 都找不到错在哪儿..
if(file.exists() && file.canWrite())
file.delete();
这样都不行…
后来突然突然想到错在哪儿了..
就是在写完文件后没有close
out.write(b);
out.flush();
out.close();
......
关于Java内存分配,很多问题都模模糊糊,不能全面贯通理解。今查阅资料,欲求深入挖掘,彻底理清java内存分配脉络,只因水平有限,没达到预期效果,仅以此文对所研究到之处作以记录,为以后学习提供参考,避免重头再来。
一、Java内存分配
1、 Java有几种存储区域?
* 寄存器
-- 在CP ......