![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM java虚拟机
文章平均质量分 94
fantasyYan2
我的源代码被猫吃了
展开
-
Java内存模型
java内存模型(JMM)定义来屏蔽各种硬件和操作系统的内存差异,以实现让java程序在各种平台都能达到一致的内存效果的模型。主内存与工作内存关系1.Java内存变量定义:包括实例字段,静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的。2.主内存与工作内存关系:所有变量都存储在主内存,工作内存保存了主内存的副本拷贝3.变量读取,赋值等操作都在工作内存中进行,不能直接读取内存变量。主内存与工作内存交互流程lock:作用于主内存变量,一个变量标识为被一条线程锁定的状态原创 2020-07-13 20:16:56 · 1642 阅读 · 0 评论 -
java虚拟机-解释器与编译器
Java最初通过解释器进行解释执行,为了提高代码执行效率,在运行时,对热点代码会把这些代码与本地平台相关的机器码。完成这个任务的编辑器称为即时编译器,简称JIT编译器。用户可以使用参数-Xint强制虚拟机运行与“混合模式”,使用-Xcomp强制运行与编译模式。热点代码有两类:1. 被多次调用的方法2. 被多次执行的循环体检查热点代码有两种方式:1.采用热点探测,查找经常出现的栈顶的方法2.基于计数器的热点探测:为每个方法或者代码块建立计数器,统计技术方法。HotSpot虚拟机采用第二种方式,为每原创 2020-07-12 22:36:58 · 549 阅读 · 0 评论 -
java虚拟机-类加载机制
概述虚拟机把类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。java类的加载,连接和初始化都是在程序运行时完成的,这种策略增加了一定开销,但是提高了灵活性,如:1.对于面向接口的编程,可以根据实际情况决定实现类2.用户可以自定义类加载器,让本地的应用程序通过网络或者其他地方加载一个二进制流做为文件。类加载时机五总初始化场景1.遇到new,getstatsic,putstatic或者invokestat原创 2020-07-12 19:00:45 · 366 阅读 · 0 评论 -
JVM java虚拟机-垃圾收集
引用计数法对象增加一个引用计数加1,失去减1判断对象是可以被回收1.引用计数为02.无法链接到“GC Roots”对象,GC Roots对象有:静态常量,静态对象,native对象,虚拟机栈对象(因此两个对象a,b如果互相引用,然后a=null,b=null,会被判定可以被垃圾回收;不需要stop the word,因为OopMap)四种引用类型1.强引用:即一般普遍的引用2.软引用:用SorftRefernce实现,在内存即将用完时,会被清理,使用场景网页缓存、图片缓存3.弱引用:弱引用通原创 2020-07-11 14:52:22 · 372 阅读 · 0 评论 -
JVM java虚拟机-Java内存区域
Jdk8之后的内存分区Jdk8之前的内存分区程序计数器1.可以看做当前线程执行字节码的行号指示器,用于控制java字节码执行到第几行。2.每个线程都有一个独立的程序计数器,从而实现切换线程后能恢复到正确的位置执行虚拟机栈1.生命周期与线程相同2.主要存放对象引用与基本数据类型本地方法栈为虚拟机的native方法服务Java堆存放对象实例方法区1.是各个线程共享的区域2.存放类信息,常量,静态变量修改java内存区域的大小1.修改java堆内存(xmx最大值,xms最小值)原创 2020-07-11 14:44:25 · 354 阅读 · 0 评论