目录

Life in Flow

Embrace your dreams and unlock your full potential at every stage of life.

虚拟机图形化工具

Jconsole  JConsole (Java Monitoring and Management Console)是一种基于 JMX 的可视化监视、管理工具,它管理部分的功能是针对 JMXMBean 进行管理,由于 MBean 可以使用代码、中间件服务器的管理控制台或者所有符合 JMX 规范的软件进行访问。  jconsole集成了线程与内存的可视化展示。 Jconsole连接方式 本地连接:通过JDK/bin目录下的“jconsole.exe”启动JConsole 后,将自动搜索出本机运行的所有虚拟机进程,不需要用户自己再使用 jps 来查询了。 远程连接 # 生成项目jar mvn install # scp将jar包进行远程复制 sudo scp /Users/daniel/Desktop/jvm-demo-0.0.1-SNAPSHOT.jar root@172.16.244.151:/usr/local # 将jar包启动 #nohup代表以守护线程的方式启动 # -Dcom.sun.management.jmxremote.port 开启远程访问JXM端口 nohup....

Nginx

Nginx 主要应用场景 静态资源服务 反向代理(缓存、负载均衡) API 服务 Nginx 的大规模使用的原因 互联网的数据量快速增长 摩尔定律的失效。 操作系统、大量软件没有做好服务于多核 CPU 的准备。譬如:低效的 Apache 一个连接对应一个进程。 Nginx 优势 高并发,高性能 可扩展性好 高可靠性 热部署 BSD 许可证 Nginx 的组成 二进制可执行文件:由各模块源码编译出的一个文件。 配置文件:控制 Nginx 的行为。 访问日志:记录每一条 http 请求信息。 错误日志:定位问题。 编译 Nginx 下载 [root@localhost test]# wget http://nginx.org/download/nginx-1.14.2.tar.gz [root@localhost test]# tar -xzf nginx-1.14.2.tar.gz 各目录简介 [root@localhost test]# cd nginx-1.14.2/ [root@localhost nginx-1.14.2]# ls # Nginx配置文件vim....

虚拟机工具

虚拟机工具的作用  使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度。  需要分析的数据包括:运行日志、异常堆栈、GC 日志、线程快照 ( threaddump/javacore文件)、堆转储快照( heapdump/hprof文件)等。 虚拟机工具JPS  jps (JVM Process Status Tool)是其中的典型jvm工具。除了名字像 UNIX 的 ps 命令之外,它的功能也和 ps 命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class, main()函数所在的类)名称以及这些进程的本地虚拟机唯- ID (Local Virtual Machine Identifier, LVMID),虽然功能比较单一,但它是使用频率最高的 JDK 命令行工具 -l #展示类全限定名,如果进程执行的是Jar包则输出Jar路径。 -v #输出虚拟机进程启动时JVM参数 C:\Users\soulboy>jps 10488 7944 DemoApplication 1740 Jps 2252 Launcher 4988 Remot....

内存分配

Java堆内存分配 对象分配遵循的规则 对象主要分配在新生代的 Eden 区上。 如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配。 少数情况下也可能会直接分配在老年代中。(新生代放不下的情况下、对象比较大的情况下[几乎占据From or To 区的全部,不如直接复制到老年代]。) 查看对象分配在哪个区域 //-verbose:gc -XX:+PrintGCDetails -XX:+UseSerialGC public class TestJVMFirst { private static final int byteSize = 1024 * 1024; public static void main(String[] args) { byte[] bytes = new byte[40 * byteSize]; //40MB内存 } } 控制台输出 Heap PSYoungGen total 76288K, used 47514K [0x000000076b000000, 0x0000000770500000, 0x00000007c0000000) eden ....

JVM垃圾收集器

JVM垃圾收集器  垃圾收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。 并发与并行(垃圾回收器) 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个 CPU上。 垃圾回收器分类 串行回收,Serial回收器,单线程回收,全程“Stop The World”。 并行回收,名称以Parallel开头的回收器,多线程回收,全程“Stop The World”。 并发回收,cms与G1,多线程分阶段回收,只有某阶段会“Stop The World”。 Serial收集器  Serial是一个单线程的垃圾收集器。采用“复制”算法,适用于新生代特点如下: “Stop The World”,它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。在用户不可见的情况下把用户正常工作的线程全部停掉。 使用场景:多用于桌面应用,Client端的垃圾回收器。 桌面应用内存小,进行垃圾回收的时间....

垃圾回收算法

为什么要垃圾回收  Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。 对象存活算法之引用计数法  堆中每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象实例分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引用的对象实例的计数器+1),但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时,对象实例的引用计数器减1。任何引用计数器为0的对象实例可以被当作垃圾收集。当一个对象实例被垃圾收集时,它引用的任何对象实例的引用计数器减1。(局部变量表的生命周期跟随方法的运行和结束) 优点  引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利。 缺点  无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样,他们的引用计数永远不可能为0. 在代码中分析JVM是否采用引用计....

对象

对象创建流程 虚拟机遇到一条new指令时,首先检查这个对应的类能否在常量池中定位到一个类的符号引用 判断这个类是否已被加载、解析和初始化(类会被加载到方法区中) 为这个新生对象在Java堆中分配内存空间,其中Java堆分配内存空间的方式主要有以下两种:指针碰撞、空闲列表。 将分配到的内存空间都初始化为零值(引用null,int 0,boolean false) 设置对象头相关数据(GC分代年龄、对象的哈希码 hashCode、元数据信息) 执行对象方法(init方法) 指针碰撞(缺点:内存碎片) 分配内存空间包括开辟一块内存和移动指针两个步骤 非原子步骤可能出现并发问题,Java虚拟机采用CAS配上失败重试的方式保证更新操作的原子性 空闲列表(缺点:无法精确的分配内存空间,导致浪费内存空间) 分配内存空间包括开辟一块内存和修改空闲列表两个步骤 非原子步骤可能出现并发问题,Java虚拟机采用CAS配上失败重试的方式保证更新操作的原子性 Java对象内存布局 对象头  用于存储对象的元数据信息:包括对象运行时数据和类型指针 Mark Word 部分数据的长度在32位和64位....