四、JVM参数调优

1、调优工具

(1)jvisualvm:jdk提供的性能分析工具,可以监控java进程,对dump文件分析;查看应用程序的详细信息,针对不同插件,实现监控GC过程、内存、进程、线程等,也可以实现对Tomcat的监控

(2)Jps(Process Status):查看Java进程

(3)Jstat:使用命令行的方式监控Java应用程序的资源和性能,加参数gc/compile/class/gccapacity/gcnew/gcoldcapacity/printcompilation查看各种信息

(4)jmap:内存映像工具,可以生成dump堆转储快照,也可加参数“-XX:+HeapDumpOnOutOfMemoryError”在OOM时自动生成dump文件

(5)jhat:将dump出来的hprof文件转成html的形式,加参数在OOM时自动生成文件到指定路径

(6)jstack:查看线程的调用堆栈

(7)jinfo:查看正在运行的 java 应用程序的扩展参数

2、利用工具调优

(1)查看堆信息

- 查看不同代空间分配,从而看不同代划分是否合理

- 查看对象引用情况,以避免内存泄漏

- 查看垃圾回收过程,查看垃圾回收算法设置是否合理

- 查看堆内存和对象信息

(2)线程监控

- 监控线程数量、状态

- 使用dump查看线程内部运行情况

- 避免产生死锁

(3)热点分析

- CPU 热点:查看哪些方法占用CPU

- 内存热点:查看占用空间大的对象

(4)快照查看

- 对比两次快照的对象情况,避免浮动垃圾或遗漏对象等现象

(5)检查内存泄漏

- 避免系统资源(堆、栈、进程等)错误使用

3、调优参数

(1)分类

-开头的标准参数:数据模型选择、类搜索路径

-X开头的非标准参数:设置堆栈大小

-XX开头的不安全参数:堆和垃圾回收器设置

(2)堆设置

初始堆(-Xms)、最大堆(-Xmx)、永久代大小(-XX:MaxPermSize)

年轻代(-XX:NewSize=n)、新老代比值(-XX:NewRatio=n)

(3)回收器设置

设置串行(-XX:+UseSerialGC)、并行(-XX:+UseParallelGC)、并发收集器(-XX:+ UseConcMarkSweepGC)

(4)并行收集器设置

使用CPU数(-XX:ParallelGCThreads=n)、并行搜集暂停时间、垃圾回收时间占比(-XX:GCTimeRatio=n)

(5)并发收集器

设置增量模式(-XX:+CMSIncrementalMode)、设置并行收集使用的CPU数

五、类加载机制

1、类文件结构

魔数:确定文件是否符合class文件规范

文件版本、常量池、文件类型(类/接口)

字段、属性、方法集合

2、类加载机制

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载7个阶段,验证、准备、解析3个部分统称为连接

(加载-连接-初始化)

3、类加载各阶段作用

加载:获取二进制字节流、转换到内存

验证:验证文件格式、元数据、字节码、符号引用

准备:为类变量分配内存并设置初始值

解析:常量池内的符号引用替换为直接引用

初始化:执行类构造器

4、常用类加载器

(1)启动类加载器(Bootstrap ClassLoader,NO1):是虚拟机的一部分,将lib目录的类库加载到虚拟机内存;如果编写自定义加载器,将启动类置为空;

(2)扩展类加载器(Extension ClassLoader,NO2):加载\lib\ext目录或系统变量指定的类库,开发者可以直接使用;

(3)应用程序类加载器 (Application ClassLoader,NO3):加载用户路径(ClassPath)所指定的类库,是默认的类加载器;

(4)(自定义)类加载器均继承ClassLoader类,调用(重写)loadClass()完成类加载,findClass()尝试从父类中记载。

5、类与类加载器的关系

由类加载器和类本身才能确定在JVM中的唯一性

比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义

例如:如果被不同的累加器加载,即使是同一个class文件,两个类也不相等

6、双亲委派模型

(1)程序加载

三种类加载器相互配合进行加载,也可加入自定义类加载器

(2)双亲委派模型

尝试将请求委派给父类加载器

所有的加载请求都传送到顶层的启动类加载器中

当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。

【面试题总结】JVM02:JVM参数调优、类加载机制的更多相关文章

  1. JVM参数调优

    JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...

  2. (转)JVM参数调优八大技巧

    这里和大家分享一下JVM参数调优的八条经验,JVM参数调优,这是很头痛的问题,设置的不好,JVM不断执行FullGC,导致整个系统变得很慢,网站停滞时间能达10秒以上,相信通过本文的学习你对JVM参数 ...

  3. SpringBoot-内部运行jvm参数调优

    SpringBoot JVM参数调优 这个根据服务器的内存大小,来设置堆参数. -Xms :设置Java堆栈的初始化大小 -Xmx :设置最大的java堆大小 实例参数-XX:+PrintGCDeta ...

  4. 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优

    堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...

  5. 【学习】011 JVM参数调优配置

    自动内存管理机制 Java虚拟机原理 所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为 系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box.Vmar ...

  6. JVM参数调优:Eclipse启动实践

    本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java ...

  7. JVM参数调优总结

    一.前言 要想成为一名高级Java开发具备JVM调优的能力必不可少,能够根据项目实际情况进行JVM调优的前提是理解JVM原理和常用JVM参数的含义及作用,虽然<深入理解Java虚拟机>这本 ...

  8. Java后端进阶-JVM参数调优

    package com.study.performance; import org.springframework.boot.SpringApplication; import org.springf ...

  9. jvm 参数调优

    FROM: http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html#CMSInitiatingOccupancyFraction ...

  10. SpringBoot-外部运行jvm参数调优

    外部运行调优 java -server -Xms32m -Xmx32m  -jar springboot_v2.jar

随机推荐

  1. Nginx服务器性能优化与安全配置实践指南

    转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...

  2. 使用mtr来判断网络丢包和网络延迟

    转载自:https://mp.weixin.qq.com/s/UsjzMS1_rdxenw0TPlqwyQ 常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Li ...

  3. Deployment必须包含资源对象

    Deployment 是一个控制器,能够用来控制 pod 数量跟期望数量一致,配置 pod 的发布方式 Deployment 会按照给定策略进行发布指定 pod,保证在更新过程中不可用数量在限定范围内 ...

  4. Elasticsearch准实时索引实现(数据写入到es分片并存储到文件中的过程)

    溢写到文件系统缓存 当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘) ES中默认1秒,refr ...

  5. 2>&1到底是什么意思?

    java -jar snapshot.jar > snapshot.log 2>&1 & 写Java的朋友一定对上面的命令很熟悉,相信大部分人都知道>表示的是重定向, ...

  6. switch分支

    说明: 当表达式的值等于case中的常量,则会执行其中包含的语句块 break用于跳出循环,如果不写,则直接执行下一个常量的语句块,不再去判断表达式的值是否等于下一个case的常量(case穿透) 最 ...

  7. EF在二手市场中的使用

    二手市场这个小项目是我第一次用EF,边学边写边记录吧 首先明确几个知识点 存储过程 存储过程简单来说,就是为以后的使用而保存的一条或多条SQL语句的集合.可将其视为批件,虽然它们的作用不仅限于批处理. ...

  8. mybatis框架图

  9. 齐博x1 小程序与公众号长期永久订阅消息的申请方法

    要给用户发送消息提醒的话,需要申请订阅消息.订阅消息分一次性订阅与长期永久性订阅.一次性订阅没有实际意义,用户订阅一次就只能发送一次.这里主要是指导大家如何申请永久长期订阅功能.对于公众号而言,大家先 ...

  10. TCP 序列号和确认号是如何变化的?

    大家好,我是小林. 在网站上回答了很多人的问题,我发现很多人对 TCP 序列号和确认号的变化都是懵懵懂懂的,只知道三次握手和四次挥手过程中,ACK 报文中确认号要 +1,然后数据传输中 TCP 序列号 ...