
JVM
kekeoneone
offeroffer
展开
-
JMM——内存模型
多线程下读写规则,保证各种性质。 1.原子性: synchronized(){} 2.可见性:可读不可以写 3.有序性:指令重排问题 为什么发生?如何解决? 多线程中****指令重排会影响结果 单线程中不影响的 synchronized是重量级的,影响性能。 voliate关键字解决可见性问题;但是不能保证原子性;可以禁用指令重排。 .join()或者.Alive() 或者interrupt() 但是voliate这么优秀,为什么还要synchronized CAS: Compare and sw原创 2020-06-13 17:57:36 · 165 阅读 · 0 评论 -
JVM——类加载
1.执行编译: javac -parameters -d . HellowWorld.java class,版本,长度,类名,方法名,找main,找常量池 2.字节码指令: b1;返回值 invokevirtual/special/static 关于++的面试题: 3.关于异常中面试题 finally中执行return,会吞掉异常 try{ int i=1/0; }catch (Exception e){ }finally {原创 2020-06-13 13:26:40 · 112 阅读 · 0 评论 -
JVM——垃圾回收
垃圾回收: 1.如何判断对象可以回收? 1.引用计数法。 弊端:无法解决循环引用的问题。比如两个对象相互引用。这个算法就无法解决 2.可达性分析算法: 根对象(GC Root):肯定不能被进行垃圾回收的,扫描,是否被根对象直接或间接引用,如果是,不能被回收;否则,将来解可以被当做垃圾。 MAT工具看看: System Class: Native Stack: Thread: Busy Monitor:正在加锁的对象 五种引用:(面试题) 强:实线(沿着根对象能找到他,平时一般都是强引用)都不要了,才原创 2020-06-12 20:08:18 · 167 阅读 · 0 评论 -
JVM——内存结构
结构 1.程序计数器 作用:记录程序执行的下一条指令。 特点: 1.线程私有 cpu给这个线程非配一段时间,但是这段时间没有执行完,换下一个,程序计数器记下下一条指令。每个线程都有自己的程序计数器。 2.虚拟机栈 1.什么是栈? 线程运行时需要的内存空间。 内存空间中: 方法区:存储.class的相关信息(执行进栈,new进堆) 堆:new出来的东西 栈:存储方法中的局部变量 1. 栈由多个栈帧组成。每个线程,只能有一个活动栈帧,对应着正在执行的那个方法。 栈帧:每个方法运行时需要的内存。方法;(参数,局部原创 2020-06-12 17:02:57 · 191 阅读 · 0 评论