JVM总结
文章平均质量分 73
滴哩哩哩滴哩哩哩哒哒
Keep coding
展开
-
JVM内存区域
Java虚拟机在运行时,会把内存空间分为若干个区域:方法区、堆内存、虚拟机栈、本地方法栈和程序计数器。1.方法区方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据。在jdk1.7及其之前,方法区是堆的一个“逻辑部分”(一片连续的堆空间),但为了与堆做区分,方法区还有个名字叫“非堆”,也有人用“永久代”(HotSpot对方法区的实现方法)来表示方法区。...转载 2018-08-13 21:28:43 · 335 阅读 · 0 评论 -
JVM内存溢出
1、堆内存溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证GC Roots到对象之间有可达路径来避免垃圾收集回收机制清除这些对象,当这些对象所占空间超过最大堆容量时,就会产生OutOfMemoryError的异常。堆内存异常示例如下:运行后会报异常,在堆栈信息中可以看到 java.lang.OutOfMemoryError: Java heap space 的信息,说...转载 2018-08-13 21:36:44 · 409 阅读 · 0 评论 -
JVM垃圾回收
垃圾回收,就是通过垃圾收集器把内存中没用的对象清理掉。垃圾回收涉及到的内容有:1、判断对象是否已死;2、选择垃圾收集算法;3、选择垃圾收集的时间;4、选择适当的垃圾收集器清理垃圾(已死的对象)。1、判断对象是否已死判断对象是否已死就是找出哪些对象是已经死掉的,以后不会再用到的,就像地上有废纸、饮料瓶和百元大钞,扫地前要先判断出地上废纸和饮料瓶是垃圾,百元大钞不是垃圾。判断对象是否已死有引用...转载 2018-08-13 21:53:04 · 254 阅读 · 0 评论 -
JVM性能调优
1、JVM调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟。程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行...转载 2018-08-13 22:04:40 · 193896 阅读 · 38 评论 -
JVM调优命令——jstack
jstack命令最大的作用就是用来生成thread dump文件,thread dump文件中记录了某一时刻CPU信息,例如线程执行到哪个类中的哪个方法上以及现在的线程状态。分析线程状态对JVM调优意义重大,比如在某个方法阻塞,等待等。由于thread dump记录的是某一时刻的CPU信息,所以一般调优时候需要间隔10s左右输出两三份thread dump文件来对比分析。命令格式为 : ...原创 2018-09-16 00:06:07 · 3929 阅读 · 0 评论 -
JVM调优命令——jhat
jhat命令一般和jmap命令配合使用,用于分析jmap命令生成的heap dump文件。jhat命令内置一个微型的HTTP/HTML服务器,可以以web网页的形式查看分析结果,所以一般不会直接在应用服务器上使用jhat命令,一般将heap dump文件拿到其他服务器上去分析。主要参数:1.-j<flag>由于jhat命令启动一个JVM来执行,用该参数可以设置JVM的启动参...原创 2018-09-16 22:36:07 · 546 阅读 · 0 评论 -
JVM调优命令——jmap
JVM调优最重要的是通过分析dump文件。dump文件有两种,一种是heap dump文件,另一种是thread dump文件。heap dump文件是某一时刻JVM堆存储的快照,是一种镜像文件,用来记录某一时刻内存信息,包括内存的占用,使用率以及GC方式等。而thread dump是记录某一时刻cpu信息,主要是线程的执行情况等,例如某一时刻线程执行到哪个类的哪个方法上了。heap dump文件...原创 2018-09-14 19:58:59 · 821 阅读 · 0 评论 -
关于JVM的指令重排序
指令重排序有两类,编译器重排序和处理器重排序。编译器重排序发生在编译期,处理器重排序发生在运行时。其实指令重排序的本意是提高程序并发效率,原则是重排序后的程序运行结果和单线程运行结果一致。为什么指令重排序会提高程序并发效率呢?这里先理解一下CPU的最小调度单位是线程这个概念。首先一个CPU同时只能处理一个线程,在最初单核CPU的时候,是通过轮询的方式去完成多线程的,在线程之间完成上下文切换。随...原创 2018-09-26 23:15:28 · 1118 阅读 · 1 评论 -
GC种类和GC算法种类精简梳理
主要有五种GC:1.Serial GCSerial体现在工作是单线程的,精简,但是垃圾收集时会进入"stop-the-world"状态。是JDK8中client模式下默认GC。新生代的Serial GC采用复制算法,老年代的Serial GC采用标记-整理算法,由于区别算法不同,老年代的Serial GC专称Serial Old。-XX:+UseSerialGC2.ParNew G...原创 2018-10-30 22:41:42 · 3547 阅读 · 0 评论