51、JVM
1、谈谈你对JVM的理解:
2、什么是OOM有哪些方法分析:
3、JVM常见的参数调优你知道哪些:
4、JVM中类加载器有哪些:
1、类加载器四种类加载器:BootStrap启动类加载器、拓展类加载器、应用类加载器
2、双亲委派:类的加载是从上到下的,找到了就直接使用
3、沙箱隔离:自己写的类不能污染Java自带的类
一、Jvm的内存结构
1、本地方法栈:存放native 修饰的方法
2、程序计数器:存放执行方法的顺序和异常处理,记录了方法调用的执行情况
3、方法区:存放每个类的结构信息
4、栈:管运行,不存在垃圾回收,存放8种基本数据类型,实例方法,引用类型变量
5、堆:管存储,新生区,老年区,元数据,新生区又分为:伊甸区、幸存0区(from)、幸存1区(to)
运行时首先new出来的对象存放在新生区里面的伊甸区,伊甸区被放满之触发GC,GC处理完之后如果有存活的对象将会复制到幸存0区,第二次时伊甸区放满,触发第二次GC,将会在幸存0区和伊甸区中
进行垃圾回收,如果有对象存在,将对象复制到幸存1区,这样反复15次如果还有对象存活,将对象复制到老年区。
4、JVM 的垃圾回收算法(GC)
引用计数法:
复制算法:
标记清除:
标记压缩:
5、JMM java内存模型:可见性,原子性,有序性
6、查看JVM的两个参数
public static void main(String[] args) { long maxMemory = Runtime.getRuntime().maxMemory(); long totalMemory = Runtime.getRuntime().totalMemory(); System.out.println("Xmx - MAX_MEMORY字节数: "+ maxMemory+"\t字节、"+ (maxMemory /(double)1024/1024)+ "MB"); System.out.println("Xms - total_Memory字节数: "+ totalMemory+"\t字节、"+ (totalMemory /(double)1024/1024)+ "MB"); }
配置JXM的参数:-Xms10m -Xmx10m -XX:+PrintGCDetails
OOM(OutOfMemoryError)内存溢出例子
public static void main(String[] args) { long maxMemory = Runtime.getRuntime().maxMemory(); long totalMemory = Runtime.getRuntime().totalMemory(); System.out.println("Xmx - MAX_MEMORY字节数: "+ maxMemory+"\t字节、"+ (maxMemory /(double)1024/1024)+ "MB"); System.out.println("Xms - total_Memory字节数: "+ totalMemory+"\t字节、"+ (totalMemory /(double)1024/1024)+ "MB"); test(); } public static void test() { String str = "www.atguigu.com"; while (true){ str += str + new Random().nextInt(88888888)+new Random().nextInt(99999999); } }