自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 资源 (3)
  • 收藏
  • 关注

原创 Jprofile 的内存视图分析

一点睛LIvememory内存剖析:class/class instance的相关信息。例如:对象的个数,大小,对象创建的方法执行栈,对象创建的热点。内存中对象,我们需要关注的三种情况。1频繁创建的Java 对象:死循环、循环次数过多。2存在大对象:读取文件时,byte[]应该边读边写,如果长时间不写的话,导致byte[]过多。3存在内存泄漏二 代码package chapter03;import java.util.ArrayList;impor...

2021-08-31 18:52:59 293

原创 Jprofile 的遥控监测功能

一代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] args) { ArrayList&lt.

2021-08-31 17:46:28 124

原创 Jprofile 启动选项说明

一 Jprofile启动后的界面 二启动选项说明1第一项说明当选择这一项出现如下界面,表示打开系统已有的demo或已保存过的session2 第二项说明当选择这一项出现如下界面,表示去连接一个正在运行的程序3 第三项说明当选择这一项出现如下界面,表示去连接一个本地或远程的服务器4 第四项说明当选择这一项出现如下界面,表示离线打开一个快照...

2021-08-30 18:41:38 210

原创 JProfiler 基本介绍

一 点睛在运行 Java 的时候有时候想测试运行时占用内存情况,这时候就需要使用测试工具查看了。在 eclipse 里面有 Eclipse Memory Analyzer tool(MAT)插件可以测试,而在 IDEA 中也有这么一个插件,就是 JProfiler。JProfiler 是由 ej-technologies 公司开发的一款 Java 应用性能诊断工具。功能强大,但是收费。二 特点 使用方便、界面操作友好(简单且强大) 对被分析的应用影响小(提供模板) CPU,

2021-08-30 17:53:23 8135

原创 OQL 语言以及在MAT中使用

一点睛MAT支持一种类似于 SQL 的查询语言OQL(ObjectQueryLanguage)。OQL 使用类 SQL语法,可以在堆中进行对象的查找和筛选。它包含下面4种基本语法结构。 SELECT子句 FROM子句 WHERE子句 内置对象和方法 二 在MAT中OQL 位置三语法1SELECT子句2FROM子句3WHERE子句4内置对象和方法四实战1 select * fr...

2021-08-30 17:51:55 2754

原创 内存泄漏分析实战

一代码package chapter03;import java.util.Arrays;import java.util.EmptyStackException;public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { .

2021-08-29 16:45:59 203

原创 内存泄漏的8种情况

一 静态集合类静态集合类,如 HashMap、LinkedList等等。如果这些容器为静态的,那么它们的生命周期与JVM程序一致,则容器中的对象在程序结束之前不能被释放,从而造成内存泄漏。简单而言,长生命周期对象持有短生命周期对象的引用,尽管短生命周期的对象不再使用,但是因为长生命周期对象持有它的引用而导致不能被回收。package chapter03;import java.util.ArrayList;import java.util.List;public class Mem...

2021-08-29 16:33:24 10105

原创 内存泄漏的理解为分类

一什么是内存泄漏可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否被引用。那么对于这种情况下,由于代码的实现不同就会出现多种内存泄漏问题(让JVM误以为此对象还在引用中,无法回收,造成内存泄漏)内存泄漏理解见下表。 是否还被使用? 是 是 是否还被需要? 是 否 是内存泄漏吗? 不是内存泄漏 ...

2021-08-29 15:04:25 276

原创 MAT 关于 Tomcat 堆溢出分析

一背景说明Tomcat是最常用的JavaServlet容器之一,同时也可以当做单独的Web容器。Tomcat本身使用Java实现,并运行在Java虚拟机之上。在大规模请求时,Tomcat有可能因为无法承受压力而发生内存溢出错误。这里根据一个被压垮的Tomcat的堆快照文件,来分析Tomcat在奔溃时的内存情况。二 总体分析从该图分析,我们应该重点关注16.4 MB这个大对象。三对大对象的withoutgoingreferences进行分析...

2021-08-29 14:28:32 249

原创 支配树的理解和实战

一支配树(DominatorTree)支配树的概念来自图论。从下层到上层分析,可以从对象的引用图推导出对应的支配树。在MAT中,单击工具栏上的对象支配树按钮,可以打开对象支配树视图。二实战1代码package chapter03;import java.util.ArrayList;import java.util.List;/*** 有一个学生浏览网页的记录程序,它记录每个学生访问过的网站地址。* 它由三个部分组成:Student、WebPa...

2021-08-29 11:18:07 1410

原创 MAT 的浅堆和深堆案例分析

一代码package chapter03;import java.util.ArrayList;import java.util.List;/*** 有一个学生浏览网页的记录程序,它记录每个学生访问过的网站地址。* 它由三个部分组成:Student、WebPage和StudentTrace三个类* <p>* -XX:+HeapDumpBeforeFullGC -XX:HeapDumpPath=D:\mat_log\student.hprof*/public clas.

2021-08-29 10:42:40 274 1

原创 MAT 的浅堆和深堆

一shallowheap——浅堆指的是一个对象所消耗的内存。在 32位系统中,一个对象引用会占据4个字节,一个int类型会占据4个字节,long变量会占据8个字节,每个对象头会占用8个字节。根据堆快照格式不同,每个对象可能会向8字节进行对齐。以String为例:2个int占用8个字节,对象引用占用 4个字节,对象头占用 8个字节,一共20个字节,向8字节对齐,占用24个字节。(jdk 7)这个24个字节为 String 对象的浅堆大小。它与String的valu...

2021-08-29 09:46:23 368

原创 MAT的 thread overview 功能

一点睛查看系统的java线程。 查看局部变量信息。二代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(Stri...

2021-08-29 08:58:17 1266

原创 MAT中 Histogram 的功能

一代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] args) { ArrayList&lt.

2021-08-28 11:02:50 496

原创 MAT 界面主要功能

一代码/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/p.

2021-08-28 10:13:31 190

原创 MAT的基本介绍以及获取 dump 的四种方式

一点睛MAT(Memory Analyzer Tool)工具是一款功能强大的 Java 堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT 是基于 Eclipse 开发的,不仅可以单独使用,还可以作为插件的形式嵌入在 Eclipse 中使用。是一款免费的性能分析工具,使用起来非常方便。MAT 可以分析 heap dump 文件。在进行内存分析时,只要获得了反映当前设备内存映像的 hprof 文件,通过 MAT 打开就可以直观地看到当前的内存信息。一般说来,这些内存信息包含: 所有.

2021-08-28 09:33:17 1165

原创 Visual VM抽样器

一代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] args) { ArrayList&lt.

2021-08-28 09:13:20 282

原创 Visual VM 生成和分析线程 dump 文件

一代码package chaper02;/*** @className: ThreadDeadLock* @description: 线程死锁* @date: 2021/8/22*/public class ThreadDeadLock { public static void main(String[] args) { StringBuilder s1 = new StringBuilder(); StringBuilder s2 = new .

2021-08-27 18:14:30 465

原创 Visual VM查看和生成dump文件

一代码package chapter03;import java.util.ArrayList;import java.util.Random;/*** -Xms600m -Xmx600m -XX:SurvivorRatio=8* 老年代:400m* 伊甸园:160m* s0:20m* s1:20m*/public class OOMTest { public static void main(String[] args) { ArrayList&lt.

2021-08-27 08:55:23 1140

原创 Visual VM 监控工具基本功能

一 主要功能 1.生成/读取堆内存/线程快照 2.查看 JVM 参数和系统属性 3.查看运行中的虚拟机进程 4.程序资源的实时监控 5 生成/读取线程快照 6.JMX 代理连接、远程环境监控、CPU 分析和内存分析 官方地址:https://visualvm.github.io/index.html二 基本使用1 代码1package chapter03;import java.util.ArrayList;import jav

2021-08-25 18:29:20 420

原创 Visual VM监控工具基本介绍

一 点睛Visual VM 是一个功能强大的多合一故障诊断和性能监控的可视化工具。它集成了多个 JDK 命令行工具,使用 Visual VM 可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的 CPU、GC、堆、方法区及线程的信息(jstat、jstack)等,甚至代替 JConsole。在 JDK 6 Update 7 以后,Visual VM 便作为 JDK 的一部分发布(VisualVM 在 JDK/bin 目录下)即:它完全免费。工具位置如下。Vis

2021-08-25 09:05:03 337

原创 JVM 监控工具——JConsole

一点睛jconsole:从 Java5 开始,在 JDK 中自带的 java 监控和管理控制台。用于对 JVM 中内存、线程和类等的监控,是一个基于 JMX(java management extensions)的 GUI 性能监控工具。官方地址:https://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html工具位置二 实战——基本测试1 代码package chapter03.

2021-08-24 18:13:17 990

原创 JVM 监控及诊断GUI工具概述

一 点睛使用 JVM 的命令行工具或组合能帮您获取目标 Java 应用性能相关的基础信息,但它们存在下列局限。 1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。 2.要求用户登录到目标 Java 应用所在的宿主机上,使用起来不是很方便。 3.分析数据通过终端输出,结果展示不够直观。 为此,JDK 提供了一些内存泄漏的分析工具,如 jconsole,jvisualvm 等,用于辅助开发人员定位问题,但是这些工具

2021-08-24 08:37:23 114

原创 jstatd——远程主机信息收集

JVM 相关指令不仅涉及到监控本机的 Java 应用程序,一些监控工具也支持对远程计算机的监控(如 jps、jstat)。为了启用远程监控,则需要配合使用 jstatd 工具。命令 jstatd 是一个 RMI 服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。jstatd 服务器将本机的 Java 应用程序信息传递到远程计算机。...

2021-08-23 18:06:45 147

原创 jcmd——多功能命令行

一 点睛在 JDK 1.7 以后,新增了一个命令行工具 jcmd。它是一个多功能的工具,可以用来实现前面除了 jstat 之外所有命令的功能。比如:用它来导出堆、内存使用、查看 Java 进程、导出线程信息、执行 GC、JVM 运行时间等。官方帮助文档:https://docs.oracle.com/en/java/javase/11/tools/jcmd.htmljcmd 拥有 jmap 的大部分功能,并且在 Oracle 的官方网站上也推荐使用 jcmd 命令代 jmap 命令jcmd

2021-08-23 08:54:31 939

原创 jstack——打印 JVM 中线程快照

一 点睛jstack(JVM Stack Trace):用于生成虚拟机指定进程当前时刻的线程快照(虚拟机堆栈跟踪)。线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合。生成线程快照的作用:可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。这些都是导致线程长时间停顿的常见原因。当线程出现停顿时,就可以用 jstack 显示各个线程调用的堆栈情况。官方帮助文档:https://docs.oracle.com/en/java/javase/

2021-08-22 16:30:52 1862

原创 jhat——JDK 自带堆分析工具

一 点睛jhat(JVM Heap Analysis Tool):Sun JDK 提供的 jhat 命令与 jmap 命令搭配使用,用于分析 jmap 生成的 heap dump 文件(堆转储快照)。jhat 内置了一个微型的 HTTP/HTML 服务器,生成 dump 文件的分析结果后,用户可以在浏览器中查看分析结果(分析虚拟机转储快照信息)。使用了 jhat 命令,就启动了一个 http 服务,端口是 7000,即 http://localhost:7000/,就可以在浏览器里分析。说明:j

2021-08-22 15:00:41 1272

原创 jmap显示堆内存

一点睛jmap -heappidjmap -histopid二实战1代码package chaper02;import java.util.ArrayList;/*** -Xms60m -Xmx60m -XX:SurvivorRatio=8* 老年代:40m* 伊甸园:16m* s0:2m* s1:2m*/public class GCTest { public static void main(String[] args) { ...

2021-08-22 14:38:58 304

原创 导出dump堆转储快照文件的两种方式

一点睛二 手动方式jmap -dump:format=b,file=<filename.hprof> <pid>>jmap -dump:live,format=b,file=<filename.hprof> <pid>由于 jmap 将访问堆中的所有对象,为了保证在此过程中不被应用线程干扰,jmap 需要借助安全点机制,让所有线程停留在不改变堆中数据的状态。也就是说,由 jmap 导出的堆快照必定是安全点位置的。这可能导致基.

2021-08-22 11:03:32 1101

原创 jmap——导出内存映像文件&内存使用情况

jmap(JVM Memory Map):作用一方面是获取 dump 文件(堆转储快照文件,二进制文件),它还可以获取目标 Java 进程的内存相关信息,包括 Java 堆各区域的使用情况、堆中对象的统计信息、类加载信息等。开发人员可以在控制台中输入命令“jmap -help”查阅 jmap 工具的具体使用方式和一些标准选项配置。官方帮助文档:https://docs.oracle.com/en/java/javase/11/tools/jmap.html基本使用语法为: jmap [opti

2021-08-22 10:27:48 1043

原创 jinfo——实时查看和修改 JVM 配置参数

一 点睛jinfo(Configuration Info for Java):查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数。在很多情况卡,Java 应用程序不会指定所有的 Java 虚拟机参数。而此时,开发人员可能不知道某一个具体的 Java 虚拟机参数的默认值。在这种情况下,可能需要通过查找文档获取某个参数的默认值。这个查找过程可能是非常艰难的。但有了 jinfo 工具,开发人员可以很方便地找到 Java 虚拟机参数的当前值。基本使用语法为:jinfo [options] pid说

2021-08-22 10:05:30 3871

原创 jstat——查看 JVM 统计信息(下)

一 点睛1 垃圾回收相关的参数 -gc:显示与 GC 相关的堆信息。包括 Eden 区、两个 Survivor 区、老年代、永久代等的容量、已用空间、GC 时间合计等信息。 -gccapacity:显示内容与 -gc 基本相同,但输出主要关注 Java 堆各个区域使用到的最大、最小空间。 -gcutil:显示内容与 -gc 基本相同,但输出主要关注已使用空间占总空间的百分比。 -gccause:与 -gcutil 功能一样,但是会额外输出导致最后一次或当前正在发生的

2021-08-21 17:03:20 169

原创 jstat——查看 JVM 统计信息(上)

一 点睛jstat(JVM Statistics Monitoring Tool):用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。在没有 GUI 图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题。官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.ht

2021-08-21 15:51:14 228

原创 jps——查看正在运行的 Java 进程

一 点睛jps(Java Process Status):显示指定系统内所有的 HotSpot 虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。说明:对于本地虚拟机进程来说,进程的本地虚拟机 ID 与操作系统的进程 ID 是一致的,是唯一的。基本使用语法为:jps [options] [hostid]我们还可以通过追加参数,来打印额外的信息。options 参数 -q:仅仅显示 LVMID(local virtual machine id),即本地虚拟机唯一 id

2021-08-21 15:04:07 4254

原创 JVM 监控及诊断命令行工具概述

一 概述性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络 I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。体会 1:使用数据说明问题,使用知识分析问题,使用工具处理问题。体会 2:无监控、不调优!二 简单命令行工具在我们刚接触

2021-08-21 14:15:38 93

原创 性能优化概述

一 大厂面试题1 支付宝支付宝三面:JVM 性能调优都做了什么?2 小米有做过 JVM 内存优化吗?从 SQL、JVM、架构、数据库四个方面讲讲优化思路3 蚂蚁金服JVM 的编译优化jvm 性能调优都做了什么JVM 诊断调优工具用过哪些?二面:jvm 怎样调优,堆内存、栈空间设置多少合适三面:JVM 相关的分析工具使用过的有哪些?具体的性能调优步骤如何4 阿里如何进行 JVM 调优?有哪些方法?如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决

2021-08-21 11:03:09 155

原创 Java9中关于类加载器的新特性

一 点睛为了保证兼容性,JDK9 没有从根本上改变三层类加载器架构和双亲委派模型,但为了模块化系统的顺利运行,仍然发生了一些值得被注意的变动。1 扩展机制被移除,扩展类加载器由于向后兼容性的原因被保留,不过被重命名为平台类加载器(platform class loader)。可以通过 classLoader 的新方法 getPlatformClassLoader() 来获取。JDK9 是基于模块化进行构建(原来的 rt.jar 和 tools.jar 被拆分成数十个 JMOD 文件),其中的 J

2021-08-21 09:50:30 1135 2

原创 自定义类的加载器实战

一需求自定义类加载器,加载 D 盘下的 Demo1.class二代码1自定义的类加载器package chapter04.java2;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.IOException;/*** 自定义 ClassLoader*/public class My...

2021-08-21 09:11:56 131

原创 自定义类的加载器

一 为什么要自定义类加载器? 隔离加载类 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:阿里内某容器框架通过自定义类加载器确保应用中依赖的 jar 包不会影响到中间件运行时使用的 jar 包。再比如:Tomcat 这类 Web 应用服务器,内部自定义了好几种类加载器,用于隔离同一个 Web 应用服务器上的不同应用程序。 修改类加载的方式 类的加载模型并非强制,除 Bootstrap 外,其他的加载并非一定要引入,或者根据实际情况在某个时间点进行按需进行动态加载。

2021-08-21 08:52:56 339

原创 沙箱安全机制

一 点睛沙箱安全机制 保证程序安全 保护 Java 原生的 JDK 代码 Java 安全模型的核心就是 Java 沙箱(sandbox)。什么是沙箱?沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问。通过这样的措施来保证对代码的有限隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。所有

2021-08-20 17:47:23 299

2 shiro身份认证.mp4

身份验证介绍了身份验证基础、principals、credentials、身份认证流程、Realm、多 Realm 配置以及相关实战。

2020-05-19

1 shiro简介.mp4

Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,在此分享给大家!

2020-05-19

Java单选.docx

常见Java单选题,

2019-12-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除