Fork me on GitHub

html详解

html详解

1. 什么是HTMl?

  • Hyper Text Markup Language(超文本标记语言)
    • 超文本:图片,音频,视频…..

1.1 HTML的基本结构

1.2 网页框架标签

  1. DOCTYPE:告诉浏览器,我们要使用什么规范
  2. html: 网页都囊括在html标签中
  3. head:网页的头部
  4. body:代表网页的主体
  5. title:网页的标题
  6. meta:描述网站的一些信息(一般用来做SEO)
阅读更多...

Java-基础-JVM&JMM

JVM探究

  • 请你谈谈对JVM的理解? java8虚拟机和之前的变化更新?
  • 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?
  • JVM的常用调优参数有哪些?
  • 内存快照如何抓取,怎么分析Dump文件?
  • 谈谈JVM中,你对类加载器的认识?

需要掌握的内容

1. JVM的位置

Jvm的位置

阅读更多...

Java-基础-Synchronized

Synchronized的使用

1. 为什么要使用synchronized?

原因:在并发编程中存在线程安全问题,

主要原因有:

  1. 存在共享的数据
  2. 多线程共同操作共享数据
  3. 关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或者某个代码块
  4. 同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile
阅读更多...

JVM-11-双亲委派模型

JVM-11-双亲委派模型

前序

​ 在上一篇中,我们介绍了类加载的过程,包括五个阶段

  • 加载
  • 验证
  • 准备
  • 解析
  • 初始化

mark

本篇博客,我们来介绍Java虚拟机的双亲委派模型,在介绍之前,我先抛出一个问题:

我们知道,在JDK源码中,有各种Java自带的类,比如java.lang.String,java.util.List等,那么我们自己的项目中,能够写一个命名为java.lang.String.java 等JDK源码中存在的类,并且在项目中使用吗?

阅读更多...

JVM-10-类加载

JVM-10-类加载

前序

在上一篇文章中,我们详细介绍了Java的类文件结构(Class文件结构),那么这些个Class文件是如何被加载到内存,由虚拟机来使用的呢?这就是本篇将要介绍的——类加载过程。

参考博客https://blog.csdn.net/ln152315/article/details/79223441

1. 类的生命周期

类从被加载到虚拟机内存开始,到卸载出内存为止,其声明周期流程如下:

mark

上图中红色的五个部分(加载,验证,准备,初始化,卸载)的顺序都是固定的。也就是说,类的加载必须要按照这种循序按部就班的开始。这里的开始“开始”不是按部就班的“进行”或者“完成”,因为这些阶段通常都是互相交叉混合进行的,通常会在一个阶段执行过程汇总调用另一个阶段。

阅读更多...

JVM-09-类文件结构

JVM-09-类文件结构

前序

计算机是由晶体管、电路板等组装而成的电子设备,而这些电子设备其实只能识别0与1的信号。

那么问题来了,在操作系统上编写的Java代码(由字母,数字等各种符号组成),打包后部署到服务器上,是如何被计算机所识别并运行的呢?

另外操作系统有很多种,包括Windows系统,Linux系统,Mac OS系统等,而我们同样的Java代码,却可以不做任何处理在不同系统上运行,这又是为什么呢?

带着这些疑问,你将在下面的内容中找到答案!!!

阅读更多...

GitHub+hexo搭建个人博客

GitHub+hexo搭建个人博客详细教程

1. 前言

​ 随着互联网浪潮的翻腾,国内外涌现出越来越多优秀的社交信息分享者,随之优秀的信息分享平台也越来越多,最常见的就是个人博客。GitHub + hexo 是比较受欢迎的一种方式,为什么呢?省钱、简单、快速。如果你也是一个不甘寂寞、喜欢折腾的程序猿(媛),如果你也有过这种想要搭建一个所以自己的博客网站的想法,可以跟着我这篇教程博客一起,它可以让你快速搭建起一个属于自己的个人博客,享受这种从0到1的过程。

朱酱酱的博客 : 链接

阅读更多...

IDEA,配置优化

IDEA:配置优化

  • 工欲善其事必先利其器,我平时比较喜欢使用IDEA,这个软件可以很大程度上提高工作效率。IDEA全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他语言),IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。
  • IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。
  • 一直都有想过写一篇关于IDEA的设置优化的博文,因为确实网上的不是很适合我的风格。且网上的优化教程不是很多,自己摸索出来一下,希望能够帮到大家。
阅读更多...

JVM-08-监控和分析工具(可视化)

JVM-08-监控和分析工具(可视化)

前序

上篇博客我们介绍了[虚拟机监控和分析命令行工具],由于其不够直观,不是很容易排查问题,那么本篇博客我们就来介绍几个可视化工具。

1. JConsole

  • JConsole(Java Monitoring and Management Console)是一款基于 JMX 的可视化监视和管理的工具。

  • 它管理部分的功能是针对JMX MBean 进行管理,MBean可以使用代码,中间件服务器的管理控制台活着所有符合JMX规范的软件进行访问。

1.1 启动JConsole

  • 这是我们JDK自带的监控工具,在JDK的安装目录bin下即可找到。
  • 如果配置过JDK环境变量,在CMD命令提示符即可打开

mark

这是一个可执行文件,直接双击即可打开。打开如下:

mark

1.2 监控界面介绍

JConsole 这个监控工具可以监控本地进程以及远程进程,我们这里以监控本地进程为例,来介绍具体的监控界面。

点击本地进程下面的任意一栏,进入到监控界面。

  • 监控概览

mark

这个界面是我们建立本地连接后,进入的第一个页面。显示的是整个虚拟机主要运行数据的概览,包括“堆使用情况”、“线程”、“类”、“CPU占用率”等四项信息的曲线图,这些曲线图是后面“内存”、“线程”、“类”页签的信息汇总,下面会分别介绍这几个页签。

  • 内存监控

这个页面相当于上一篇介绍的jstat命令,只不过这里是可视化的,用于监控虚拟机内存的一些变化趋势.

监视区域如下:

mark

  • 线程监控

这个页面标签相当于介绍的可视化的jstack命令,遇到线程停顿的时候可以使用这个页面标签进行监控分析。

mark

另外,此页面左下角还有一个检测死锁的按钮,出现线程死锁后,点击此按钮,便会出现一个新的死锁页签。

比如,对于如下这段死锁代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Deadlock {
public static void main(String[] args) {
Object lock1 = new Object();
Object lock2 = new Object();

new Thread(()->{
synchronized (lock1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2){
System.out.println("线程1结束运行");
}
}
}).start();

new Thread(()->{
synchronized (lock2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1){
System.out.println("线程2结束运行");
}
}
}).start();
}
}

这里创建了两把锁,lock1,lock2,创建了两个线程,线程1获取到lock1后,说你给我lock2,我就释放lock1;而线程2获取到lock2后,说你给我lock1,我就释放lock2。两个线程谁也不释放,于是便造成了死锁现象。

通过监控工具便可以检查到,如下:

mark

  • 类监控

mark

  • VM概要

展示一些JVM信息。

mark

1.3 配置Tomcat远程监控

其实使用监控工具,我们很少对本地的程序进行监控,大多数情况都是对部署在远程Linux服务器上的程序进行监控,那么想要使用 JConsole这款工具进行远程监控,我们必须要进行一些配置。我们首先介绍对Tomcat的远程监控。

  1. 配置catalina.sh

在该文件下加入如下配置信息:

1
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

 -Dcom.sun.management.jmxremote 表示开启远程连接。

 -Dcom.sun.management.jmxremote.port=1099 表示设置远程连接端口为1099

 -Dcom.sun.management.jmxremote.authenticate=false 表示不需要密码验证

 -Dcom.sun.management.jmxremote.ssl=fals 表示不需要开启ssl连接

 -Djava.net.preferIPv4Stack=true 表示只支持IPV4地址

 -Djava.rmi.server.hostname=192.168.146.200 表示监控的主机名为192.168.146.200

添加位置如下:

mark

  1. 建立连接

通过上面的配置,启动Tomcat后,我们只需要在 JConsole 的远程连接界面,输入 192.168.146.200:1099,然后点击连接即可

mark

  1. 连接错误
  • 配置的端口不能被占用,可以通过 netstat -tunlp|grep 1099 命令验证。

  • 云服务器的端口有没有添加安全组

  • 通过 hostname -i 命令,如果打印的不是前面设置的ip地址,则需要通过 vim /etc/hosts 命令,将127.0.0.1 修改为本机IP地址。

1.4 配置远程jar包监控

启动jar包的命令如下:

1
nohup java -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1089 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar jvm-0.0.1-SNAPSHOT.jar &

配置端口,ip地址,和远程监控Tomcat大体上是一样的,然后建立连接即可。

2. JVisualVM

英文介绍为 All-in-One Java Troubleshooting Tool。听名字我们就知道这是一块功能很全,很强大的Java运行监视和故障处理工具,并且是官方主力发展的虚拟机故障处理工具,其性能分析比很多专业收费软件都不会逊色多少。

2.1 启动JVisualVM

和前面介绍的JConsole工具一样,这也是 JDK 自带的一个工具,在安装目录bin下,可以直接双击启动。

mark

打开界面如下:

mark

2.2 监控界面介绍

其实大体界面和JConsole差不多。

mark

  • 抽样器:可以对CPU,内存进行详细监控统计

mark

  • 插件机制

JVisualVM 比较强大的地方在与可以安装各种插件,提供各种不同的功能。

mark

然后设置插件中心的地址:

1
https://visualvm.github.io/pluginscenters.html

mark

选择对应的插件地址时,要根据我们的JDK版本来选定。

比如,我这边的JDK版本如下:

mark

插件会遇到的问题解决方案: https://blog.csdn.net/xionglangs/article/details/77603343

设置好下载地址后,我们这边选择需要的插件,点击安装即可!比如比较常用的插件 Visual GC(用来查看GC日志)

mark

安装完成之后,我们便可以在页签上看到这个新增的插件。

mark

2.3 配置远程连接

不管是远程连接Tomcat还是jar包,都和介绍JConsole一模一样,详情请参考上面的配置。

2.4 使用文档

对于JVisualvm,官方有详细的中文文档说明,如下:

https://visualvm.github.io/documentation.html

  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信