![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
jvm
小阳同学^_^
是行动让潜能无限
展开
-
17、SPI
spi1、什么是SPI是Java核心包的接口(放在<java_home>/jre/lib下,被BootstrapClassLoader 加载),但是实现由第三方服务商实现。第三方服务商的实现类的类名放在 /meta-inf/services 下。但是编译后的class类放在 web-inf/classes文件下2、SPI是由上层服务提供的接口,加载下层的实现类。3、SPI的使...原创 2020-03-29 14:51:50 · 126 阅读 · 0 评论 -
16、基于栈的解释执行过程
public int calc(){ int a=100; int b=200; int c=300; return (a+b)*c;}编译后的字节码public int calc(); Code: Stack=2, Locals=4, Args_size=1 0: bipush 100 2: istore_1 ...原创 2020-03-28 18:10:38 · 121 阅读 · 0 评论 -
15、方法的调用
1、运行时虚拟机栈的结构局部变量表,操作数栈,动态链接,返回地址2、解析:解析是在类加载的时候,class文件里存放的方法的符号引用,解析就是将符号引用转化为直接引用的过程。编译时就能确定,并且能将符号引用转化为直接引用的,叫静态解析。运行时才能够加载到方法区的方法,这时候才会有方法入口,在运行时将符号引用转换为直接引用,叫做动态解析3、动态链接指的就是将符号引用解析为直接引用地址静态分...原创 2020-03-28 17:57:53 · 88 阅读 · 0 评论 -
14、运行时栈帧结构
jvm运行时线程私有的内存区域虚拟机栈分为4个部分:局部变量表、操作数栈、动态链接、返回地址和附加信息局部变量表局部变量表在编译的时候,已经计算好了分配的内存空间局部变量表的最小单位 slotjava么有说明slot占多少个字节,多少位,但是,是这样说的。1个slot可以存放int、float、short、boolean、 refrence、byte、char、returnAddres...原创 2020-03-26 23:00:06 · 167 阅读 · 0 评论 -
13、类加载器(ClassLoader)
java有三大类加载器:bootstrap启动类加载器,也叫根加载器主要加载 <java_home>/jre/lib/ 下的.jar文件或-Xbootclasspath参数指定的路径下的jar包。例如 rt.jar只加载.jar文件中以 java,javax,sun开头的Class文件启动类加载器是和JVM绑定的。是用C++实现的。Extension扩展类加载器是在JV...原创 2020-03-25 23:26:43 · 104 阅读 · 0 评论 -
12、类加载过程
加载1、通过1类的全路径名来获取定义该类的二进制字节流2、加载常量到方法区中的常量池3、在方法区生成一个这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口**是不是所有的对象都会加载到堆中?**答案是NO。虚拟机将类加载到方法区的时候,就会在方法区生成一个Java.lang.Class的对象加载文件来源:ZIP包、WAR包、JSP动态生成、Proxy、从...原创 2020-03-24 22:42:40 · 70 阅读 · 0 评论 -
11、类的加载顺序
类加载顺序1、加载父类中的静态代码块2、加载子类中的静态代码块3、加载父类中的普通代码块4、加载父类中的构造方法5、加载子类中的普通代码块6、加载子类中的构造方法静态代码块优先被加载(先加载父类,后加载子类)父类中普通代码块和构造方法(父类先加载,父类中普通代码块先加载,最后再加载构造方法(任何时候构造方法都是最后加载的))子类中普通代码块和构造方法代码实例public cl...原创 2020-03-23 22:51:48 · 92 阅读 · 0 评论 -
10、类加载时机
1、类从CLASS文件被加载到JVM中,整个生命周期:加载、检验、准备、解析、初始化、使用、卸载连接(linking):检验、准备、解析其中:固定的顺序有:加载、检验、准备、初始化、卸载。解析在某些情况下会在初始化之后再进行(这是为了支持Java的动态绑定或晚期绑定)2、触发类初始化(有且只有这几种情况)(加载、检验、准备在初始化之前执行)1)new 对象2)访问静态变量3)访问静...原创 2020-03-23 22:42:01 · 65 阅读 · 0 评论 -
9、解释执行和编译执行
我们平时写的Java代码,会通过/bin目录下的Javac编译成class字节码,此次编译的时候会有一次重排序。什么是解释执行(Java的夸平台性由此而来):解释执行就是JVM将Javac编译的class字节码,拿出来一行一行解释成机器码什么是JIT(即时编译):Javac将Java代码编译成class字节码,JVM再讲字节码编译成与平台和机器相关的机器码。方便执行的更快。JIT(just ...原创 2020-03-22 22:05:47 · 114 阅读 · 0 评论 -
8、Class类文件的结构
1、魔数:前4个字节(0xCAFEBABE),是来确定是否是class文件的。翻译过来就是咖啡宝贝2、class版本:第5、6个字节是次版本号,第7、8个字节是主版本号3、常量池入口:接下来存放的就是常量池。常量池是个表结构的。有21项常量。1.7以前共11张表,JDK1.7以后共14张表常量池主要放2大类常量。字面量和符号引用字面量:常量。被final修饰的静态变量符号引用:1)类和接...原创 2020-03-22 19:51:57 · 104 阅读 · 0 评论 -
7、老年代进入条件
1、躲过15次GC,进入老年代可以通过JVM参数 “-XX:MaxTenuringThreshold”来设置,默认情况是15岁2、分配担保;CMS:将Eden+servivor -->移动到另一个servivor中的时候,servivor空间不够用,会在老年代做分区担保3、大对象:CMS(老年代收集器)配合Serial和ParNew(年轻代):可参数配置。直接进入老年代,跟随老年代...原创 2020-03-21 16:18:26 · 1013 阅读 · 0 评论 -
6、G1
G1内存模型1、内存布局:没有了原来的物理隔离,只是把堆分成了2048个Region区(每个区1MB~32MB不等),所以堆空间的上限是64G新生代的大小范围是 5%~60%。是根据用户配置的可暂停时间来动态分配的。2、分区:Eden(年轻代),Servivor(幸存者),old(老年代),Humongous(巨行分区,属于老年代)CMS收集器分区:年轻代:eden+servivor+...原创 2020-03-21 16:09:19 · 251 阅读 · 0 评论 -
5、垃圾收集器(JVM)
###serial单线程收集器,在JDK1.3以前使用。serial是新生代收集器,可配合CMS(老年代JDK1.5,JDK1.6)使用###ParNew多线程收集器,除了多线程外,和serial是一样的可配合CMS使用###CMS并发低卡顿收集器为什么会有CMS收集器呢?因为之前的老年代收集器(Parallel Old和Serial Old)在GC的时候会全区静止(Full ...原创 2020-03-19 21:36:14 · 76 阅读 · 0 评论 -
4、垃圾收集算法
###标记-清除该算法最大的缺点是会产生内存碎片,弃用###复制算法JDK1.7的时候,会将堆划分为多个eden-servivor-servivor该算法用于新生代Eden:servivor:servivor 8:1:1新生代的对象70%-95%都是被GC的。所以会将Eden区和servivor区存活的对象,复制到另一个servivor中。如果这个servivor区的内存不够时,会...原创 2020-03-19 11:51:30 · 76 阅读 · 0 评论 -
3、对象已死吗?
###怎么判断哪个对象可以被GC回收1、计数法:每个对象内部记录了被调用的次数,当新增1个引用时,计数器 +1,当引用失效时候,计数器-1缺陷:当出现循环引用的时候,GC回收不了2、可达性分析算法:从GC ROOTS 链上开始,不在GC ROOTS链上的都需要被GC在JAVC中可作为GC ROOTS的对象:1)Java虚拟机栈的局部变量表中的对象2)引用本地方法栈的对象3)引用方法...原创 2020-03-19 11:43:52 · 59 阅读 · 0 评论 -
2、Hotspot虚拟机
###对象的创建###对象的内存布局###对象的访问定位原创 2020-03-17 22:44:46 · 146 阅读 · 0 评论 -
1、JVM模型
###Java运行时数据区模型程序计数器,Java虚拟机栈,Java堆,本地方法栈,方法区###程序计数器是线程私有的,记录了线程执行的地址,方便多线程的情况下,线程切换回来的时候,继续执行字节码解释器工作时,就是通过改变程序计数器的值来选取下一次需要执行的指令:循环、跳转、分支、异常处理、线程切换。如果执行的是Java方法:程序计数器记录的是Java执行的地址如果执行的是JNI方法...原创 2020-03-17 10:58:39 · 63 阅读 · 0 评论