随笔分类 -  jvm基础

摘要:多个类加载器是如何协同工作的 ? 双亲委派模型双亲委托模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法完成这个 阅读全文
posted @ 2019-06-30 19:40 曲阳阳 阅读(168) 评论(0) 推荐(0)
摘要:类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 类加载时机 初始化 一,遇到new,getstatic,putstatic,invokestatic这四条字节码指令时,如果类没有进行初 阅读全文
posted @ 2019-06-30 10:50 曲阳阳 阅读(167) 评论(0) 推荐(0)
摘要:字节码指令 java 虚拟机的指令由一个字节长度的,代表着某种特定操作的含义的数字,称为操作码,以及跟随其后零至多个代表此操作所需参数的操作数而组成 操作码的长度为1个字节,因此最大只有256条 基于栈的指令集架构. 在虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息lload fl 阅读全文
posted @ 2019-06-27 19:59 曲阳阳 阅读(160) 评论(0) 推荐(0)
摘要:Class文件 javac Class文件是一组以8进制为基础的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件中,中间没有添加任何分隔符,整个class文件存储的内容几乎全是程序运行的必要数据,没有空隙存在。 当遇到8位字节以上的空间的数据项,则会按照高位在前的方式分割成若干个8位字节 阅读全文
posted @ 2019-06-26 23:32 曲阳阳 阅读(140) 评论(0) 推荐(0)
摘要:虚拟机工具 jps java process status 本地虚拟机唯一id lvmid local virtual machine id 连续执行3次,jps显示 jps -l 显示进程所执行的主类或者jar文件 jps -m 显示所运行的主类所接受的参数 program arguments a 阅读全文
posted @ 2019-06-13 11:40 曲阳阳 阅读(142) 评论(0) 推荐(0)
摘要:内存分配 原则: 优先分配到eden 大对象直接分配到老年代 长期存活的对象分配到老年代 空间分配担保 动态对象年龄判断 验证优先分配到eden 验证空间分配担保 VM arguments: -verbose:gc -XX:+PrintGCDetails -XX:+UseSerialGC -Xms2 阅读全文
posted @ 2019-06-12 23:44 曲阳阳 阅读(139) 评论(0) 推荐(0)
摘要:垃圾回收 如何判定对象为垃圾对象? 引用计数法 可达性分析法 如何回收? 回收的策略 标记-清除算法 复制算法 标记-整理算法 分代收集算法 垃圾回收器 serial Parnew Cms G1 何时回收? 引用计数法 在对象中添加引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,当引用 阅读全文
posted @ 2019-06-12 19:07 曲阳阳 阅读(120) 评论(0) 推荐(0)
摘要:java虚拟机内存管理 每个线程就是一个顺序的执行单元,线程共享区即多个线程共享同一块区域,线程独占区即每个线程都有自己的虚拟机栈,本地方法栈,程序计数器。 程序计数器是一个比较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,位于线程独占区,如果线程执行的是java方法,这个计数器记录的 阅读全文
posted @ 2019-06-11 18:48 曲阳阳 阅读(163) 评论(0) 推荐(0)
摘要:jdk ,jre 和 jvm的关系 内存溢出问题的分析 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 通过Memory Analyzer分析 Shallow Heap 对象本身所占用的内存大小,不包含引用 阅读全文
posted @ 2019-06-10 10:32 曲阳阳 阅读(100) 评论(0) 推荐(0)