类加载过程、初始化和实例化阶段分析

     推荐几篇关于Java类的加载、初始化和实例化过程分析,想深入了解Java类的这几个过程,请耐心地、一个一个地看完,相信会使你对Java有一个新的了解。

     第一篇:深入理解Java类加载器(一):Java类加载原理解析

        每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这个异常背后涉及到的是Java技术体系中的类加载机制。本文简述了JVM三种预定义类加载器,即启动类加载器、扩展类加载器和系统类加载器,并介绍和分析它们之间的关系和类加载所采用的双亲委派机制,给出并分析了与Java类加载原理相关的若干问题。

      第二篇:JVM类生命周期概述:加载时机与加载过程

        我们知道,一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用。事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的类加载机制。本文概述了JVM加载类的时机和生命周期,并结合典型案例重点介绍了类的初始化过程,揭开了JVM类加载机制的神秘面纱。

      第三篇:深入理解Java对象的创建过程:类的初始化与实例化

     在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。 

    

     在我看完这三篇文章后,对Java的类加载有了全新的认识,不过也引入了新的问题:

        在类加载时,我们已经知道在加载过程后,会在Java的方法区(方法区是JDK规范中规定的,其在JDK7中的实现是永久代,JDK8中的实现是元空间)中生成对应的类的类对象(这时的类对象还不能使用),在解析阶段后,这个类对象才可以使用,新的疑问是这个类中的字符串常量是什么时候保存到字符串常量池的?

     下面这篇文章可以解释这个问题:字符串常量池、class文件常量池和运行时常量池

扫描二维码关注公众号,回复: 9427557 查看本文章

      这篇文章说字符串常量池在方法区,这是JDK中规定的,但在HotSpot中,在JDK1.7字符串常量池由方法区挪到堆中,具体可以查看:

      jdk8 HotSpot内存模型

     Java8内存模型

     对于JVM内存模型的理解(对比jdk1.7与1.8)

     看过之后,对于String的intern方法会很清楚了,对于intern方法会因为字符串常量池所在位置的不同,其使用也有所不同,具体请看:Java技术——你真的了解String类的intern()方法吗

     这是你应该知道对于JDK1.7之后的字符串常量池是在堆中存放的,如果你还想了解字符串常量池在堆中是怎么存在的话,可以再看一下字符串常量池、class文件常量池和运行时常量池,这篇文章里面说字符串常量池中存的到底是对象实例还是对象实例的引用,网上有各种说法,大家可以自行百度一下。关于这个问题我们结合Java技术——你真的了解String类的intern()方法吗这篇文章就可以知道字符串常量池里面存放的是对象实例的引用。

     看一下Java技术——你真的了解String类的intern()方法吗的代码:

String str1 = new String("SEU")+ new String("Calvin");      
System.out.println(str1.intern() == str1);     
System.out.println(str1 == "SEUCalvin");     

//在JDK1.8上运行的结果
//true  
//true  

     从str1.intern() == str1的结果为true,我们可以知道他们的引用相同,因为我们先创建的str1对象,然后调用ntern方法,将这个字符串加入到字符串常量池中,如果字符串常量池里面存放的是对象实例,那么是不是要在字符串常量池里面再创建一个对象,这样两者的地址是不会相同的,现在的结果是相同的,所以字符串常量池中存的是对象实例的引用。

发布了225 篇原创文章 · 获赞 30 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_35634181/article/details/103771537