深入理解java虚拟机(一)

 

java历史

  • 1996.01.23发布Jdk1.0
  • 1998.12.04发布jdk1.2(里程碑的版本)注意:集合容器Collection和Map都是从1.2开始
  • 1999.04.27HotSpot虚拟机发布,成为1.3后Sun JDK的默认虚拟机,这本书主要讲这个虚拟机
  • 2004.09.30发布jdk1.5这个版本也很重要,出现了自动装箱,泛型,动态注解,枚举,可变长参数,遍历循环,等语法特性

java自动内存管理机制

  • 运行时数据区域


     
     
  • 对象访问
    也就是我们java中常说的new一个对象
    Student s=new Student();
    这里的Student s会反映到java栈的本地变量表中,作为一个reference类型数据出现,我的理解也就是对象的引用s会放到栈内存中
    而new Student()这部分会反映到堆中,形成一块存储了Student类型的所有实例数据值(Instance Data,对象中各个实例字段的数据)的结构化内存,我的理解就是实例对象在堆中。包括了成员变量。
    堆中包含能查找到此对象类型数据(如对象类型,父类,实现的接口,方法等)的地址信息
    而这些类型数据则存储在方法区中。(包括静态成员变量在方法区的静态区域里)
    对象访问方式有两种
  • 第一种


     
     
  • 第二种


     
     

    本书说Sun HotSpot是使用第二种进行对象引用

总结

java中new一个对象 Student s=new Student();是把Student s存放在栈内存中,new Student()实例存放在堆内存中,Student的方法存放在方法区,s通过直接指针方式访问堆中的实例。所以s存的是堆中实例的地址值

原文地址:https://www.cnblogs.com/StudyZhh/p/9918181.html