我们日常的工作中都使用开发工具(IntelliJIDEA或Eclipse等)可以很方便的调试程序,或者是通过打包工具把项目打包成jar包或者war包,放入Tomcat等Web容器中就可以正常运行了,但你有没有想过Java程序内部是如何执行的其实不论是在开发工具中运行还是在Tomcat中运行,Java程序的执行流程基本都是相同的,它的执行流程如下:。
先把Java代码编译成字节码,也就是把.java类型的文件编译成.class类型的文件,这个过程的大致执行流程:Java源代码->词法分析器->语法分析器->语义分析器->字符码生成器->最终生成字节码,其中任何一个执行失败就会造成编译失败。
把class文件放置到Java虚拟机,这个虚拟机通常指的是Oracle官方自带的HotspotJVM。
Java虚拟机使用类加载器(ClassLoader)装载class文件。
类加载完成之后,会进行字节码效验,字节码效验通过之后JVM解释器会把字节码翻译成机器码交由操作系统执行,但不是所有代码都是解释执行的,JVM对此做了优化,比如,以Hotspot虚拟机来说,它本身提供了JIT(JustInTime)也就是我们通常所说的动态编译器,它能够在运行时将热点代码编译为机器码,这个时候字节码就变成了编译执行。
关于零基础学Java需要花多少时间这个问题,不是个比较容易回答的问题,这个问题之所以不好回答是因为问不同的人,你可能会收到不一样的回答,比如零基础自学Java的朋友,可能会回答:我已经学了两三个月,但是什么时候真的能够学好Java,我自己也不确信。
零基础选择自学Java的朋友,风险本来就比较大,因为受各种因素的影响,比如今天的学习时间跟明天的学习时间,跟大后天的学习时间都不一样,这是很正常的事情,并且每个人的学习方式和学习能力不一样,那么也会出现偏差,甚至是比较大的偏差,所以零基础选择自学的朋友学Java要多久,那么就还真的是得问问你自己。
目前来说,零基础学Java比较快速的方式就是参加Java培训,可能因为课时安排不一样,每家Java培训机构的培训时间长短不同,但是一般都是在4-6个月,这对于零基础的朋友来说,就比较有期待可能性了,参加Java培训,因为有专业的Java培训老师在,那么就大大的减少了盲目摸索的时间。
Java虚拟机是如何判定热点代码的。
Java虚拟机判定热点代码的方式有两种:。
基于采样的热点判定:主要是虚拟机会周期性的检查各个线程的栈顶,若某个或某些方法经常出现在栈顶,那这个方法就是“热点方法”,这种判定方式的优点是实现简单,缺点是很难精确一个方法的热度,容易受到线程阻塞或外界因素的影响。
基于计数器的热点判定:主要就是虚拟机给每一个方法甚至代码块建立了一个计数器,统计方法的执行次数,超过一定的阀值则标记为此方法为热点方法。
评论(0)