![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
Author1thy
山东第一医科大学
展开
-
JVM垃圾回收器
GC分类与性能指标 分类 按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式 分,可以分为并发式垃圾回收器和独占式垃圾回收器。 按碎片处理方式分,可分为压缩式垃圾回收器和非压缩是垃圾回收器。 按工作的内存空间分,可分为年轻代垃圾回收器和老年代垃圾回收器。 指标 - 吞吐量:运行用户代码的时间占总时间的比例 垃圾收集开销:吞吐量的补数,垃圾收集时间与总运行时间的比例 - 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间STW 收集频率:相对于程序执行,收集操作发生的频率 - 内存占用:原创 2020-09-22 01:46:02 · 122 阅读 · 0 评论 -
JVM垃圾回收相关概念
System.gc()的理解 在默认情况下,通过System.gc()或者Runtime.getRuntime.gc()的调用,会显示触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存 然后System.gc()调用附带一个免责声明,无法保证堆垃圾收集器的调用 JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该自动进行,无需手动触发,否则太过麻烦。在一谢特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc原创 2020-09-20 20:53:11 · 96 阅读 · 0 评论 -
JVM垃圾回收相关算法
标记阶段:引用计数算法 对每个对象保存一个整型的引用计数属性,用于记录被引用的情况,引用+1,引用失效-1 优点:实现简单,垃圾对象便于识别;判定效率搞,回收没有延迟性 缺点: 它需要独立的字段存储计数器,这样的作法增加了存储空间的开销 每次赋值都需要更新计数器,伴随着加法和减法的操作,增加了时间开销 引用计数器又一个严重的问题,即无法处理循环引用的情况。这是一条致命缺陷,导致在Java的垃圾回收器中没有使用该算法 java使用的不是引用计数算法(Python使用了) 标记阶段:可达原创 2020-09-20 15:48:11 · 107 阅读 · 0 评论 -
JVM垃圾回收概述
什么是垃圾 垃圾是指在运行程序中没有认合指针指向的对象,这个对象就是需要被回收的垃圾,如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占用的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。 为什么需要GC 对于高级语言来说,一个基本认知是如果不进行垃圾回收,内存迟早都会被消耗完,因为不断分配内存空间而不进行回收,就好像不停地生产生活垃圾而不打扫一样 除了释放没用的对象,垃圾回收也可以清楚内存里的记录碎片。碎片整理所占用的堆内存移到堆的的一段,以便将整理出的内原创 2020-09-20 00:13:33 · 96 阅读 · 0 评论 -
JVM执行引擎,解释器,即时编译器(
解释器(Interpreter): 解释器解释字节码的速度很快,但执行缓慢。缺点是: 当一个方法被多次调用时,每次都需要新的解释。 即时编译器(JIT Compiler): JIT编译器消除了解释器的缺点。执行引擎使用解释器来帮助转换字节码,但是发现热点代码(重复执行代码) ,它将使用JIT,将热点代码编译成本机机器码 。机器码直接用于重复的方法调用,从而提高系统性能。 ...原创 2020-09-17 00:40:22 · 127 阅读 · 0 评论 -
JVM运行时数据区
程序计数器 记录当前线程正在执行的字节码指令地址,是线程独享的不存在垃圾回收和OOM 栈 一个方法在栈中是一个栈帧,一个栈帧中包含局部变量表、操作数栈、动态连接和方法返回地址等,不存在垃圾回收,存在OOM 局部变量表:存放编译期可知的各种基本数据类型,对象引用和返回类型 操作数栈:方法中运算产生的变量 动态连接:每个栈帧中都包含一个指向运行时常量池中该栈帧所属方法的引用 方法出口:正常的return和异常的抛出 方法区/元空间 JDK1.8之后改为元空间,使用本地内存,用于存储类信息、常量、静态变量,即原创 2020-09-17 00:34:18 · 101 阅读 · 0 评论 -
JVM类加载器
类加载过程 一、加载 将class文件加载到内存之中,class文件来源有本地文件、JAR包、网络、动态编译java源文件。 类加载器除了JVM提供的(bootstrap 等)之外可以通过继承ClassLoader类来创建自己的类加载器 二、链接 验证:检查被加载的累结构是否正确,可以防止恶意入侵,确保Class文件中包含的信息符合当前虚拟机的要求。主要包括文件格式验证,元数据验证,字节码验证,符号引用验证 文件格式验证:验证字节流是否符合Class文件格式规范 元数据验证:对字节码描述的信息进行语原创 2020-09-16 23:59:50 · 539 阅读 · 0 评论 -
jvm堆常用设置
-XX:+PrintFlagsInitial :查看所有的参数默认初始值 -XX:+PrintFlagsFinal :查看左右参数的的最终值,修改后的值 具体查看某个参数的指令:jps:查看当前运行中的进程 jinfo -flag 查看的参数 进程id -Xms:初始化堆空间内存(默认为物理内存的1/64) -Xmx:最大堆空间内存(默认为物理内存的1/4)(建议最大最小值一致,较少系统动态调整空间二浪费性能) -Xmn:设置新生代的大小。(初始值及最大值) -XX:NewRatio:配置新生代与老年代在堆原创 2020-09-13 18:57:09 · 152 阅读 · 0 评论