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
   设置老生代区大小(间接):老生代= 堆大小 - 新生代区
  
 
 
posted on 2017-04-18 16:17  macsnow  阅读(66)  评论(0)    收藏  举报