Java虚拟机技术
1 类加载机制
类加载: 将类的class文件加载到内存中
类加载顺序: App ClassLoader -> Ext ClassLoader -> Bootstrap ClassLoader (双亲委托机制)
类生命周期: 加载 -> 连接(验证、准备、解析) -> 初始化(为静态变量赋值) -> 使用(对象被调用)-> 卸载(被垃圾回收)
2 内存模型
运行时数据区:多线程共享资源、运行时当前线程独享资源
多线程共享资源->方法区:存储类信息、常量、静态变量等数据
多线程共享资源->堆区:新生代(Eden空间、From Survivor 、To Surviver )、老生代
当前线程独享资源:Java栈、本地方法栈、程序计数器
3 垃圾回收机制
GC大致步骤:1 判断对象是否存活 (引用计数、可达性分析); 2 回收算法(复制算法、标记-压缩算法、标记-算法);
3 常用分代收集算法:根据每个区域的不同特性,利用不同的收集算法进行回收,轻生代适合于复制算法、老生代适合于标记-清除、标记-整理算法
垃圾回收器: G1收集器、CMS收集器
垃圾回收概述: JVM中,程序计数器、虚拟机栈、本地方法栈都是随着线程的销毁而销毁的,栈帧随着方法的进入和退出做入栈和出栈 ,实现了内存的自动清理。所以内存的垃圾回收主要集中在堆区和方法区,这部分内存的分配和使用是动态的。
标记-清除算法:1 优点:各种算法的基础 ; 2 缺点:效率低、产生内存碎片
标记-整理算法:1 优点:能产生连续的内存空间
复制算法 : 1 优点: 产生较少的内存碎片 2 缺点:空间消耗大,当对象存活率较高时需要多次调用
老生代区特点:存放对象存活时间较长的对象
新生代区特点:存放存活时间较短的对象
4 性能调优
设置堆空间大小:Xms、Xmx
设置新生代区大小:-XX:NewSize 、 -XX:MaxNewSize
设置永久区大小:-XX:PermSize、 -XX:MaxPermSize
设置每个线程的堆栈大小:-Xss
设置老生代区大小(间接):老生代= 堆大小 - 新生代区
浙公网安备 33010602011771号