摘要:
为什么要垃圾回收? 程序运行必然要申请内存资源,如果不再使用的对象一直占用内存资源必将导致内存溢出 什么样的对象需要被GC? 判断算法:计数器法,可达性分析算法 引用计数算法 它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。一旦某个对象的引用计数器为 0,则说明该对象已经死亡, 阅读全文
摘要:
在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机不要求栈帧在内存空间里连续分布。当退出当前执行的方法时,不管是正常返回还是异常返回,Java 虚拟机 阅读全文
摘要:
创建对象的多种方法:new语句,反射,clone, 反序列化 等 其中,Object.clone 方法和反序列化通过直接复制已有的数据,来初始化新建对象的实例字段。,而 new 语句和反射机制,则是通过调用构造器来初始化实例字段。 构造器 1. 如果一个类没有定义任何构造器的话, Java 编译器会 阅读全文
摘要:
当声明 synchronized 代码块时,编译而成的字节码将包含 monitorenter 和 monitorexit 指令。上面的字节码中包含一个 monitorenter 指令以及多个 monitorexit 指令。这是因为 Java 虚拟机需要确保所获得的锁在正常执行路径,以及异常执行路径上 阅读全文
摘要:
前不久,“虚拟机”赛马俱乐部来了个年轻人,标榜自己是动态语言,是先进分子。 这一天,先进分子牵着一头鹿进来,说要参加赛马。咱部里的老学究 Java 就不同意了呀,鹿又不是马,哪能参加赛马。 当然了,这种墨守成规的调用方式,自然是先进分子所不齿的。现在年轻人里流行的是鸭子类型(duck typing) 阅读全文