随笔分类 - java / JVM
摘要:强引用:普通对象的强引用关系。如:直接的赋值语句:String str=new String(“string”);强引用不会被垃圾回收。 软应用:当内存不足时,具有软引用关系的对象会被垃圾回收。 弱引用:不管内存足不足,都会被垃圾回收。 虚引用:虚引用通常配合引用队列来使用,用于跟踪对象被垃圾回收的
阅读全文
摘要:JVM有四种垃圾回收器: (1)串行垃圾回收器:采用单线程进行垃圾回收,占用内存比较小,适合个人电脑使用。 serial垃圾回收器:用于新生代垃圾回收,采用标记复制算法。 serial Old垃圾回收器:用于老年代垃圾回收,采用标记整理算法。 缺点:垃圾回收时只有一个线程在工作,其它java应用的线
阅读全文
摘要:判断一个对象是否存活的方法: (1)引用计数法:给每个对象设置一个引用计数器,对象被引用时就+1,引用失效时就-1,当对象的引用为0时,该对象就被视为垃圾对象,等待垃圾回收。但是该方法不能解决循环引用问题。例如:A引用B,B应用A。现在的虚拟机一般不用这种方法。 (2)可达性分析法:沿着GC Roo
阅读全文
摘要:类加载:把类的数据加载到内存,并对数据进行校验、解析、初始化,最终形成可以被虚拟机直接使用的class对象。 类加载机制:类加载采用双亲委派机制。 双亲委派机制:当类加载器收到类加载请求时,它不会第一时间去加载这个类,而是由父类加载器去加载,如果父类加载器加载不到这个类,才由子类加载器加载。 双亲委
阅读全文
摘要:常量池:可以看作是一张表,虚拟机指令根据常量表找到要执行的类名、方法名、参数类型、字面量等信息。 查看字节码结构的指令:javap -v xxx.class。 运行时常量池:当类被加载,会把该类的常量池信息放入运行时常量池中,并把里面的符号地址变为真实地址。
阅读全文
摘要:JVM内存结构由五部分组成: 堆:java堆是所有线程共享的一块内存,几乎所有的对象实例和数组都要在堆中分配内存,因此该区域也经常发生垃圾回收操作。 方法区:线程共享的。存放已被加载的类信息、常量、静态变量。 虚拟机栈:线程私有的,每个方法执行时都会创建一个栈帧,用来存储局部变量表、操作数、动态链接
阅读全文