JVM
文章平均质量分 70
jvm
zuishengmengsi1990
这个作者很懒,什么都没留下…
展开
-
1.Java内存区域与Java对象
运行时数据区域JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。具体如下图所示:程序计数器(Program Counter Register)程序计数器(Program Counter Register)是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在虚拟机概念模型中,字节码解释器工作时就是通过改变计数器的值来选转载 2021-09-03 23:11:39 · 151 阅读 · 0 评论 -
2.GC算法与内存分配策略
说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开发效率上获得了惊人的便利。理解GC,对于理解JVM和Java语言有着非常重要的作用。并且当我们需要排查各种内存溢出、内存泄漏问题时,当垃圾收集称为系统达到更高并发量的瓶颈时,只有深入理解GC和内存分配,才能对这些“自动化”的技术实施必要的监控和调节。在Java的运行时数据区中,程序计数转载 2021-09-03 23:13:24 · 233 阅读 · 0 评论 -
3.垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的HotSpot虚拟机(在此版本中正式提供了商用的G1收集器,之前G1仍处于实验状态),该虚拟机包含的所有收集器如下图所示:上图展示了7种作用于不同分代的收集器,如果转载 2021-09-03 23:25:42 · 78 阅读 · 0 评论 -
4.类加载机制
1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.cla转载 2021-09-03 23:32:47 · 106 阅读 · 0 评论 -
5.JVM实战:JVM调优策略
转自:https://zhuanlan.zhihu.com/p/269597178本篇主要了解下面内容:1、JVM调优要关注哪些指标。2、JVM调优前必须要确定调优的方向。3、常用的JVM调优策略参数。4、了解几个JVM调优场景案例和调优思路。1、JVM调优的核心关注指标调优之前首先我们要知道怎样才算是“优”,不能笼统的说我的程序性能很好,所以就需要有一个具体的指标来衡量性能情况,而在JVM里面衡量性能两个指标分别“吞吐量”和“停顿时间”。吞吐量:程序运行过程中执行两种任务,转载 2021-09-03 11:41:32 · 471 阅读 · 0 评论 -
6.jvm参数
内存管理参数本参数以JDK1.8为基础进行整理,目前默认参数大概有660个左右,使用java -XX:+PrintFlagsFinal -version可以输出所有参数的名称及默认值名词解释-XX:开头的参数代表虚拟机非稳定参数-XX:+ 开启option参数-XX:- 关闭option参数-XX:= 将option参数的值设置为valueJVM设置经验客户端应用-Xverify:none-XX:+UseG1GC-XX:MinHeapFreeRatio=10-XX:MaxHeap转载 2021-09-04 00:12:35 · 154 阅读 · 0 评论 -
7.JVM图解
1.jvm结构示意图2.JVM知识点总结原创 2021-09-04 00:05:47 · 90 阅读 · 0 评论 -
8.JVM 关于对象分配在堆、栈、TLAB的理解
引言 我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB栈上分配为什么需要栈上分配? 在我们的应用程序中,其实有很多的对象的作用域都不会逃逸出方法外,也就是说该对象的生命周期会随着方法的调用开始而开始,方法的调用结束而结束,对于这种对象,是不是该考虑将对象不在分配在堆空间中呢? 因为一旦分配在堆空间中,当方法调用结束,没有了引用指转载 2021-09-03 23:47:48 · 824 阅读 · 1 评论 -
9.内存溢出
Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,当对象数量到达最大堆的容量限制后就会产生内存溢出异常。最常见的内存溢出就是存在大的容器,而没法回收,比如:Map,List等。 内存溢出:内存空间不足导致,新对象无法分配到足够的内存; 内存泄漏:应该释放的对象没有被释放,多见于自己使用容器保存元素的情况下。 出现下面信息就可以断定出现了堆内存溢出。java.lang.OutOfMemoryError: Java heap space保证GC Roots到对象之间有转载 2021-09-04 00:31:58 · 909 阅读 · 0 评论 -
10.jvm面试题
1、详细jvm内存模型2、讲讲什么情况下回出现内存溢出,内存泄漏?3、说说Java线程栈4、JVM 年轻代到年老代的晋升过程的判断条件是什么呢?5、JVM 出现 fullGC 很频繁,怎么去线上排查问题?6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?7、类的实例化顺序8、JVM垃圾回收机制,何时触发MinorGC等操作9、JVM 中一次完整的 GC 流程(从 ygc 到 fgc)是怎样的10、各种回收器,各自优缺点,重点CMS、G111、各种回收算法12、OOM错原创 2021-09-03 23:36:37 · 103 阅读 · 0 评论