一、JDK基础

1 两个对象之间比较

(1)Java的类型系统

(2)Java

IntInteger之间的比较。

Int i=1;Integer i2 = 1 ; i==i2;//true因为有自动拆箱

Integer i = 1 ; Integer i2 = 1 ; i = i2 ;因为在【-128127】范围内int值会缓存。

Integer i = 1111;Integer i2 = 1111;  i==i2;//false //因为是两个不同的对象。

 

 

 

 

 

2 不常常使用的关键字:assert

  

5 Comparable Comparator

 

6 Iteratorenumeration

 

 

 

7 Java对象的生命周期管理:

Java小对象的解决之道——对象池(Object Pool)的设计与应用http://www.cnblogs.com/heartstage/archive/2013/11/10/3417030.html

 

 

一、类的装载,连接,初始化

 

 

二、类变量实例化为一个对象

显式实例化:

1 使用new操作符

2 调用java.lang.reflect.ConstructornewInstance方法

3 调用现有对象的clone方法

4 通过java.io.ObjectInputStreamreadObject方法反序列化

隐式实例化

隐式实例化就是指在代码中看不见以上四种关键字,但仍会在堆空间中实例化对象,比如public static void main(String [] args)方法中的参数,当有参数传入的时候,就需要实例化String对象,这就是隐式实例化;再比如System.out.println("str"+"str1");语句会实例化出一个StringBuffer对象和一个String对象,StringBuffer对象用于连接两个常量,String用于存储StringBuffer.toString()的结果。这些都是隐式的创建类对象。

 

不论是显示还是隐式,对象的生命周期管理方式都是相同的。

JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)。上面的这7个阶段,构成了 JVM中对象的完整的生命周期。下面分别介绍对象在处于这7个阶段时的不同情形。

 

 

 

Java堆中的对象是经常需要被移动的,因为gc经常会移动对象。

 

 

 

 

 

 

三、类的生命周期

装载

连接

初始化

类型生命周期主要时间的:对象实例化,垃圾收集,对象终结

卸载

 

 

JVM 方法的调用

 方法的调用不等于方法执行,方法调用阶段的目标是确定被调用的是哪一个方法,所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载阶段,会将其中一部分符号引用转化为直接引用,这种解析能成立的条件是:方法在程序运行前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的。这类方法的调用称为解析。

调用方法的指令:

invokestaticInvoke a class (static) method

invokespecialInvoke instance method; special handling for superclass, private, and instance initialization method invocations父类方法(即super.methodName()这种调用方式)、私有方法和构造方法

invokevirtualInvoke instance method; dispatch based on class

invokeinterfaceInvoke interface method

invokedynamicInvoke dynamic method

 

http://lixiaohui.iteye.com/blog/2333813

重载时是通过静态类型而不是实际类型作为分派查找的依据。

重写是通过实际类型而不是静态类型作为分派查找的依据

四、