JVM
胡晗-
不定期更新
展开
-
虚拟机类加载机制
1.概述 多个java文件经过编译打包生成可运行jar包,终由java命令运行某个主类的main函数启动程序,这里首先需要通过类加载器把主类加载到JVM。 主类在运行过程中如果使用到其它类,会逐步加载这些类。 注意,jar包里的类不是一次性全部加载的,是使用到时才加载。 定义:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java...原创 2019-09-11 08:07:24 · 159 阅读 · 0 评论 -
JVM内存模型(运行时数据区)
一.JVM整体结构和内存模型 1.1程序计数器 程序计数器可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常、线程切换等都需要依赖计数器来完成。 为了线程切换后能恢复到正确的执行位置,每个线程有独立的程序计数器。 如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的...原创 2019-09-13 15:25:17 · 211 阅读 · 0 评论 -
JVM垃圾收集算法
1.判断对象是否存活 在堆里面存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还存活着,哪些已经成为垃圾对象可以回收。 1.1引用计数算法 定义: 给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计算器就减1;当计算器为0时,就代表对象不可能再被使用,成为了垃圾对象。 引用计数法实现简单,判断效率也很高,在大部分情况下它都是一...原创 2019-09-15 11:42:53 · 101 阅读 · 0 评论 -
JVM垃圾收集器和常用参数
1.Serial收集器 Serial收集器是最基本、发展历史最悠久的收集器,这个收集器是一个单线程的收集器,在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。它是虚拟机运行在client模式下的默认新生代收集器。 2.ParNew收集器 ParNew收集器起始就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为完全一样。它是许多运行在server模式下的虚...原创 2019-09-15 11:48:44 · 149 阅读 · 0 评论 -
JVM内存分配和回收策略
1.对象优先在Eden区分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC 2.大对象直接进入老年代 虚拟机提供了一个-XX:PretenureSizeThreshhold参数,令大于这个设置值的对象直接在老年代进行分配,这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存复制。 3.长期存活的对象将进入老年代...原创 2019-09-20 06:31:05 · 98 阅读 · 0 评论