深入理解java虚拟机

Posted studyzhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解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存的是堆中实例的地址值












以上是关于深入理解java虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解java虚拟机》-晚期(运行期)优化

jvm,深入理解java虚拟机,实战:OutOfMemoryError异常

重读《深入理解Java虚拟机》虚拟机如何加载Class文件

深入理解JAVA虚拟机 晚期(运行期)优化(转载)

深入理解java虚拟机

深入理解Java虚拟机:JVM高级特性与最佳实践的内容简介