![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 54
strandtrack
这个作者很懒,什么都没留下…
展开
-
Minor GC、Major GC、Full GC
new的对象先放伊甸园区。此区有大小限制。 当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区 然后将伊甸园中的剩余对象移动到幸存者0区。 如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的,如果没有回收,就会放到幸存者1区。 如果再次经历垃圾回收,此时会重新放回幸存者0区,接着再去幸存者1区。 啥时候能去养老区呢?可以设置次数。默认是15次。·可以设置参数:-原创 2021-05-23 17:45:05 · 216 阅读 · 2 评论 -
JVM面试题汇总
1.使用PC寄存器存储字节码指令地址有什么用呢?/ 为什么使用PC寄存器记录当前线程的执行地址呢? 因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行 JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令 2.PC寄存器为什么会设定为线程私有 我们都知道所谓的多线程在一个特定的时间段内指回执行其中某一个线程的方法,CPU会不停滴做任务切换,这样必然会导致经常中断或恢复,如何保证分毫无差呢?为了能够准确地记录各个线程正在执行的当前字节码指令地址原创 2021-05-22 09:02:35 · 93 阅读 · 0 评论 -
栈的局部变量表(解决多年困惑为什么this不能在static里面使用)
局部变量表(Local Variables) 概述: 局部变量表也被称之为局部变量数组或本地变量表 定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddressleixing 由于局部变量表是建立在线程的栈上,是线程私有的数据,因此不存在数据安全问题 局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maximum local variables数据项中。在方法运行期间是不原创 2021-05-19 18:20:47 · 509 阅读 · 0 评论 -
时间片
CPU时间片 CPU时间片即CPU分配各各个程序的时间,每个线程被分配一个时间段。称作它的时间片。 在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。 但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。并行与并发 并行:同一时间多个线程同时执行; 并发:一个核快速切换多个线程,让它们依次执行,看起来像并行,实际上是并发 ...原创 2021-05-19 16:14:33 · 446 阅读 · 0 评论 -
程序计数寄存器
作用: PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条指令。 简介: 他是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域,每个线程都有自己的程序计数寄存器,是线程私有的。 举例: 举例之前,先明确一个概念: 就是反编译之后,可以看到0:iconst_3这样的,0就是指令地址,iconst_3就是操作指令。 现在开始正式举例: 假设有三个线程ABC,切换线程时,A线程执行到第五步,也就是上面说的指令地址5,这时候切换到B了,那再切换回原创 2021-05-19 11:55:18 · 394 阅读 · 0 评论 -
双亲委派机制
工作原理: 1.如果一个类加载器收到了类加载请求,他并不会自己先去加载,而是把这个请求委托给父类加载器去执行 2.如果父类加载器还存在其父类加载器,则进一步向上委托,一次递归,请求最终将到达顶层的启动类加载器 3.如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载 这就是双亲委派机制的概念。但是提到双亲委派机制不得不提到类加载器的概念(ClassLoader)。 java是运行在Java的虚拟机(JVM)中的,但是它是如何运行在JVM中.原创 2021-05-18 18:48:26 · 138 阅读 · 0 评论