当前位置: 首页 > news >正文 dedecms_v5.6室内装饰设计公司企业网站模板.rar.net网站 作品 news 2025/10/29 7:14:07 dedecms_v5.6室内装饰设计公司企业网站模板.rar,.net网站 作品,网站建设 超薄网络,红杏入口自动跳转ncnc44感慨#xff1a; 如何定义一个合格的Java程序员#xff0c;Java程序员要了解掌握哪些知识点#xff0c;网上的面试题太多了#xff0c;后端需要了解掌握的知识点太多太多了#xff0c;Java基础、数据结构、异常、多线程、Spring、Spring boot、事务、算法、数据库#xf…感慨 如何定义一个合格的Java程序员Java程序员要了解掌握哪些知识点网上的面试题太多了后端需要了解掌握的知识点太多太多了Java基础、数据结构、异常、多线程、Spring、Spring boot、事务、算法、数据库Oracle、MySQL等、缓存、中间件各种类型的、并发异步、消息中间件、微服务、netty最起码要知道有这个东西吧、大数据相关Hive、spark、flink等、JVM、网络、日志等等等等太多太多了每一个单独拿出来都有太多的点了。 所以说后端Java开发并不是单纯的学习框架编写业务逻辑这样简直太简单了也就是太容易被替代了。 最近问身边很多工作多年的程序员关于jvm相关的知识基本没有人答得出来甚至是一些比较浅显的概念点都说了解这个有什么用呢实际开发是没有用但是我还是觉得要深入思考要考虑底层原理知其然且知其所以然。 所以一直想写一个关于JVM的文章不用太复杂但是可以把一些基本的知识概念概括一下但是jvm的点太多了我们就说个大概吧也可以理解为面试知识点向所以标题是快速入门。 前言 JVM专栏分为以下几个部分类加载相关、Native相关、PC寄存器概念、堆、栈、GC相关。 文章目录 前言类加载类加载的过程加载验证准备解析符号引用与直接引用 初始化init和clinit区别 类加载器三种类加载器双亲委派好处 Native概念JNI 类加载 在Java中每一个类.java文件再通过编译器后都会形成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验解析和初始化。最终每一个类都会在方法区保存一份它的元数据在堆中创建一个与之对应的Class对象。 类加载的过程 类的加载过程分 5 个阶段加载、验证、准备、解析、初始化其中验证、准备、解析可以归纳为连接阶段。如图示 虽然五个阶段之间有箭头指向但是并不是严格的按照顺序完成在类加载过程中这些阶段会交叉混合执行以完成类的加载及初始化。 加载 加载主要是通过类加载器将.class文件读入内存的过程主要是完成以下操作 通过类的全限定名定位到.class文件。读取.class文件的二进制数据转化为方法区的运行时数据结构方法区jdk8后由元空间实现且不在jvm内存中了而是直接放到了本地内存中不受jvm参数限制这个后面具体再讲。在JVM堆内存Eden区伊甸园区中生成一个java.lang.Class对象即程序中使用任何类时系统都会为之建立一个java.lang.Class对象Class模板。它是用来表示这个类的Class对象一个类的实例对象可以有多个但Class对象只有一个一个类的class对象与其类的元数据一一对应系统中所有的类都是java.lang.Class的实例。 验证 字面意思很好理解就是对.class文件进行一系列的校验呗。目的是确保 Class 文件的字节流中包含的信息符合当前虚拟机的要求并且不会危害虚拟机自身的安全。 包括具体不展开了稍微了解下吧 文件格式验证验证字节流是否符合Class文件格式的规范。元数据验证其实就是这个类对应.class文件的字节码描述的元数据信息是否符合Java规范。比如是否存在父类父类的继承链是否正确抽象类是否实现了其父类或接口之中要求实现的所有方法字段、方法是否与父类产生矛盾等。该校验更多是Java规范层面的校验。字节码验证对类的方法体进行校验分析确保这些方法在运行时是合法的、符合逻辑的。符号引用验证发生在解析阶段。 验证阶段不是必须执行的该阶段可以跳过以缩短虚拟机类加载的时间。 准备 在该阶段会为类的静态字段信息即被static修饰的变量分配内存并且设置初始值。 内存分配仅包括 static 修饰过的变量而不包括实例变量实例变量得等到对象实例化时分配内存。初始值指的是变量数据类型的默认值而不是被在Java代码中被显式地赋予的值。但是当字段信息被 final 修饰成常量时这个初始值就是Java代码中显式地赋予的值。这些静态变量是存放在方法区内的方法区是一个逻辑概念其具体实现为jdk1.8的元空间与jdk1.8之前的永久代JDK8以后取消了永久代改为元空间而元空间在逻辑上存在物理上不存在这些类变量的内存实际上是在堆内存中的。 解析 虚拟机会把这个Class文件中常量池内的符号引用转换为直接引用。主要解析的是 类或接口、字段、类方法、接口方法、方法类型、方法句柄等符号引用。我们可以把解析阶段中符号引用转换为直接引用的过程理解为当前加载的这个类和它所引用的类正式进行“连接“的过程。 符号引用与直接引用 符号引用就是一个类中当然不仅是类还包括类的其他部分比如方法字段等引入了其他的类可是JVM并不知道引入的其他类在哪里所以就用唯一符号来代替等到类加载器去解析的时候就把符号引用找到那个引用类的地址这个地址也就是直接引用。 通俗的话来讲就是 符号引用其实可以理解为一个唯一标识可以是任意值只要能通过这个值能定位到目标。直接引用就是可以直接或间接指向目标内存位置的指针或句柄。 初始化 这个步骤是不是与bean生命周期的初始化阶段名称相同但是其实是完全不同的处理阶段。类加载的初始化过程就是执行类构造器 ()方法的过程。 类加载初始化完成后类中static修饰的变量会赋予程序员实际定义的“值”同时类中如果存在static代码块也会执行这个静态代码块里面的代码。 init和clinit区别 最根本的区别就是init是实例构造器对非静态变量解析初始化而clinit是class类构造器对静态变量静态代码块进行初始化。() 方法由编译器自动生成但不是必须生成的只有这个类存在static修饰的变量或者类中存在静态代码块但时候才会自动生成()方法。它是由编译器按语句在源文件中出现的顺序依次自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生的不包括构造函数中的语句。如下代码 class Phli {static Log log LogFactory.getLog(); // clinitprivate int x 1; // initX(){// init}static {// clinit} }类加载器 先看一张图 从图中可以看出 .class文件经过类加载器加载其实也就是通过类全限定名来获取描述此类的二进制字节流的过程而这正是类加载器在加载阶段要完成的动作。在堆中存放生成的Class类模板后续就可以通过模板new不同的实例。类实例可以通过getClass获得Class模板不同实例getClass获得的模板都是相同的。Class模板可以通过getClassLoader获取其对应的类加载器。类加载器实现的功能要完成的动作就是我们加载要完成的动作在次不做赘述。 贴个main方法代码印证下以上逻辑 public class Phli {public String name;public static void main(String[] args) {Phli phli1 new Phli();Phli phli2 new Phli();Phli phli3 new Phli();System.out.println(phli1.hashCode());System.out.println(phli2.hashCode());System.out.println(phli3.hashCode());Class? extends Phli aClass1 phli1.getClass();Class? extends Phli aClass2 phli2.getClass();Class? extends Phli aClass3 phli3.getClass();System.out.println(aClass1.hashCode());System.out.println(aClass2.hashCode());System.out.println(aClass3.hashCode());} } 执行结果 很明显不同实例的Class模板是同一个。 三种类加载器 包括三类加载器也可以说是四类多了一个自定义加载器启动类加载器根加载器、扩展类加载器及应用程序类加载器。这三种类加载器是分层的类似于上下级关系parent-child关系。 启动类加载器Bootstrap负责加载JAVA_HOME\lib 目录或者被 -Xbootclasspath 参数制定的路径例如 jre/lib/rt.jar 里所有的class文件。由C实现不是ClassLoader子类。扩展类加载器Ext负责加载Java平台中扩展功能的一些jar包包括JAVA_HOME\lib\ext 目录中 或 java.ext.dirs 指定目录下的jar包。由Java代码实现。应用程序类加载器App负责加载ClassPath路径下所有jar包。 验证下在刚才代码基础上在添加以下代码 ClassLoader classLoader1 aClass1.getClassLoader(); System.out.println(classLoader1); ClassLoader classLoader2 classLoader1.getParent(); System.out.println(classLoader2); ClassLoader classLoader3 classLoader2.getParent(); System.out.println(classLoader3);执行结果 sun.misc.Launcher$AppClassLoaderb4aac2 sun.misc.Launcher$ExtClassLoader1615099 null可以看到classLoader1为AppClassLoader也就是应用类加载器然后调用它的getParent方法得到的是ExtClassLoader也就是扩展类加载器然后我们继续往上获取结果为null。为什么为null不应该是启动类加载器吗 其实很简单因为启动类加载器是C实现的Java程序获取不到~ 双亲委派 在此之前我们先看一段代码 package java.lang;public class String {public void test() {}public static void main(String[] args) {String string new String();System.out.println(main);} }我们定义了一个package为java.lang的String类然后其中包括main方法执行看下结果 what明明有main方法为什么错误信息提示找不到main方法呢这是因为双亲委派导致的。 双亲委派其实很简单下面一句话就可以解释清楚 任何一个类加载器在接到一个类的加载请求时都会先让其父类进行加载只有父类无法加载或者没有父类的情况下才尝试自己加载。 为什么没找到main方法因为应用程序类加载器向上让扩展类加载器进行加载扩展类根据全限定名没加载到继续往上让启动类加载器加载启动类加载了我们rt.jar里面的String了肯定是没有main方法的。 这就是双亲委派总结一下 类加载器收到类加载的请求将这个请求向上委托给父类加载器去加载一直向上委托直到启动类加载器Bootstrap启动类加载器检查是否能够加载当前类能加在就结束使用当前加载器否则抛出异常通知子加载器进行加载。重复步骤3。 好处 使用双亲委派最大的作用就是安全可以保证Java核心类的API不会被随意篡改。 Native 这个更多的是了解是干什么的熟悉概念。 概念 native首先是个关键字是一个计算机函数一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现比如C或C。好概念问题了解到这儿就可以了。 凡是用到native关键字的就说明Java的作用范围达不到了。 其实平时的业务开发基本用不到但是它是无处不在的举几个例子 Object基类中的方法 public final native Class? getClass(); public native int hashCode(); protected native Object clone() throws CloneNotSupportedException;Thread.start() JNI JNI是Java Native Interface的缩写通过使用 Java本地接口书写程序可以确保代码在不同的平台上方便移植。 [1] 从Java1.1开始JNI标准成为java平台的一部分它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言尤其是C和C而设计的但是它并不妨碍你使用其他编程语言只要调用约定受支持就可以了。使用java与本地已编译的代码交互通常会丧失平台可移植性。但是有些情况下这样做是可以接受的甚至是必须的。例如使用一些旧的库与硬件、操作系统进行交互或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。 通过 JNI我们就可以通过 Java 程序代码调用到操作系统相关的技术实现的库函数从而与其他技术和系统交互使用其他技术实现的系统的功能同时其他技术和系统也可以通过 JNI 提供的相应原生接口开调用 Java 应用系统内部实现的功能。 文章转载自: http://www.morning.skrcn.cn.gov.cn.skrcn.cn http://www.morning.fdrch.cn.gov.cn.fdrch.cn http://www.morning.cxsdl.cn.gov.cn.cxsdl.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.zlqyj.cn.gov.cn.zlqyj.cn http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn http://www.morning.lqchz.cn.gov.cn.lqchz.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.wxckm.cn.gov.cn.wxckm.cn http://www.morning.bysey.com.gov.cn.bysey.com http://www.morning.qwgct.cn.gov.cn.qwgct.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.qyllw.cn.gov.cn.qyllw.cn http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn http://www.morning.qlck.cn.gov.cn.qlck.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.dbtdy.cn.gov.cn.dbtdy.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.psxwc.cn.gov.cn.psxwc.cn http://www.morning.ghfrb.cn.gov.cn.ghfrb.cn http://www.morning.xkwrb.cn.gov.cn.xkwrb.cn http://www.morning.nqdkx.cn.gov.cn.nqdkx.cn http://www.morning.mfnjk.cn.gov.cn.mfnjk.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.rmtmk.cn.gov.cn.rmtmk.cn http://www.morning.wtnwf.cn.gov.cn.wtnwf.cn http://www.morning.hknk.cn.gov.cn.hknk.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn http://www.morning.zlcsz.cn.gov.cn.zlcsz.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.ywndg.cn.gov.cn.ywndg.cn http://www.morning.kabaifu.com.gov.cn.kabaifu.com http://www.morning.gswfs.cn.gov.cn.gswfs.cn http://www.morning.yqrfn.cn.gov.cn.yqrfn.cn http://www.morning.smdnl.cn.gov.cn.smdnl.cn http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.jzykq.cn.gov.cn.jzykq.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.fzqfb.cn.gov.cn.fzqfb.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.neletea.com.gov.cn.neletea.com http://www.morning.pfntr.cn.gov.cn.pfntr.cn http://www.morning.ytrbq.cn.gov.cn.ytrbq.cn http://www.morning.gbyng.cn.gov.cn.gbyng.cn http://www.morning.tfbpz.cn.gov.cn.tfbpz.cn http://www.morning.rckdq.cn.gov.cn.rckdq.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.rqmqr.cn.gov.cn.rqmqr.cn http://www.morning.kqhlm.cn.gov.cn.kqhlm.cn http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn http://www.morning.ktrdc.cn.gov.cn.ktrdc.cn http://www.morning.fykqh.cn.gov.cn.fykqh.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.zwppm.cn.gov.cn.zwppm.cn http://www.morning.hlshn.cn.gov.cn.hlshn.cn http://www.morning.wnbpm.cn.gov.cn.wnbpm.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.bnfjh.cn.gov.cn.bnfjh.cn http://www.morning.vtbtje.cn.gov.cn.vtbtje.cn http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn http://www.morning.tkxyx.cn.gov.cn.tkxyx.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.rwls.cn.gov.cn.rwls.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.srgyj.cn.gov.cn.srgyj.cn http://www.morning.htfnz.cn.gov.cn.htfnz.cn http://www.morning.rshkh.cn.gov.cn.rshkh.cn http://www.morning.qzpw.cn.gov.cn.qzpw.cn http://www.morning.ljzgf.cn.gov.cn.ljzgf.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.qkcyk.cn.gov.cn.qkcyk.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn 查看全文 http://www.tj-hxxt.cn/news/258868.html 相关文章: 天水做网站电话做网站用什么空间 迁安三屏网站建设微信小程序开发需要什么技能 中铁建设集团华北分公司网站搜什么关键词能搜到好片 做搜狗网站关键词排名精准的搜索引擎优化 网站备案法律海口网站建设网页制作公司 简述dw网站开发流程唐山快速建站的公司 常州建网站编程网站项目做哪个比较好 平安建设宣传音频免费下载网站网站接入商 有一个域名做网站苏州关键词优化软件 兰州网站排名优化服务wordpress安装错误310 最新站长seo网站外链发布平台深圳做网站乐云seo费用优惠 国外网站有备案吗网站内容侵权 怎么做 郑州企业网站快速优化多少钱wordpress黑页 前端怎么在猪八戒网站接单做wordpress app下载 电影题材网页设计欣赏相关搜索优化软件 网站建立需要什么条件wordpress系统怎么样 合水口网站建设东莞网站建设 手机壳 南通网站制作哪个好厦门电商网站建设 怎么做一个国外网站芜湖企业做网站 华企在线网站建设app 软件开发 有哪些搜索引擎网站青岛网站建设服务平台 wordpress无需代码建站wordpress 关于我们 宿州金融网站建设做跨境的网站 js网页设计大作业源代码新乡网站自然优化 单页网站制作 在线 支付电子商务网站建设选择 新建网站多少钱网店美工课程总结 下列哪一项不属于电子商务网站建设网站建设人员分工表 网站建设推广服务合同范本开源社区源码 怎样注册个人网站广州网站推广模板 加若格网站做么样深圳网站建设评价