JVM探究
- 请你谈谈你对JVM的理解?java -> class -> jvm
java 8虚拟机和之前的变化更新 - OOM 内存溢出。栈溢出 StackOverFlowError > 怎么分析
- JVM的常用调优参数 ? 扩大内存
- 内存快照如何抓取,怎么分析Dump文件?知道吗?
- 谈谈JVM中,类加载器你的认识? rt-jar ext application
-
JVM的位置
-
JVM的体系结构
-
类加载器
-
双亲委派机制
- 首先,通过委派的方式,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类
- 另外,通过双亲委派的方式,还保证了安全性。因为Bootstrap ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上, 破坏你的JDK。
双亲委派代码
实现双亲委派的代码都集中在java.lang.ClassLoader的loadClass()方法之中:
protected Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// First, check if the class has already been loadedClass<?> c = findLoadedClass(name);if (c == null) {long t0 = System.nanoTime();try {if (parent != null) {c = parent.loadClass(name, false);} else {c = findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {// ClassNotFoundException thrown if class not found// from the non-null parent class loader}if (c == null) {// If still not found, then invoke findClass in order// to find the class.long t1 = System.nanoTime();c = findClass(name);// this is the defining class loader; record the statssun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}}
- 沙箱安全机制
- Native
很重要
7. Pc寄存器
Program Counter Register
+1+1 线程不乱
8. 方法区 Method Area
此区域属于共享区间
- 栈 stack
栈溢出
栈:8大基本类型+对象引用+实例方法
子帧是为了调用子程序,子程序执行完需要找到原来的父帧的房重新执行
- 三种JVM
- 堆
- 新生区,老年区
- 永久区
- 堆内存调优
- GC 垃圾回收器
- JMM
- 总结
1.百度
2.思维导图 需要自己去画一下。
JVM 运行在 操作系统之上
JRE包含JVM