随笔分类 - jvm
摘要:阿里巴巴Arthas详解 Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,可以方便的定位和诊断线上程序运行问题。Arthas 官方文档十分详细,详见:https://alibaba.github.io/arthas Art
阅读全文
摘要:前置启动程序 事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实例,执行过程中
阅读全文
摘要:G1收集器(-XX:+UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征. G1将Java堆划分为多个大小相等的独立区域(Region),JVM目标是不超过204
阅读全文
摘要:垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复
阅读全文
摘要:对象的创建 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层面上讲是,new关键词、对象克隆、
阅读全文
摘要:JDK体系结构 Java语言的跨平台特性 JVM整体结构及内存模型 二、JVM内存参数设置 Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里): java ‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐
阅读全文
摘要:给jdk自带的jvisualvm安装Visual GC插件,遇到We're sorry the java.net site hasclosed(我们很抱歉java.net网站已经关闭)1、找到新的更新地址visualvm新访问地址:https://visualvm.github.io/index.h
阅读全文
摘要:栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入操作数栈 iconst_2 将int类型常量2压入栈 iconst_3 将int
阅读全文
摘要:类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。 public class Math { public static final int initData = 666; public static User user = new Us
阅读全文
摘要:1 什么是字节码,字节码的好处 java源代码 --> 编译器(javac命令) --> jvm可执行的java字节码--> jvm中的解释器 > 机器可执行的二进制机器码-->程序运行 好处: 运行在jvm中,可以跨平台, 由于是运行字节码,无需再次编译,比解释型语言效率高 2 jvm调优 3.
阅读全文
摘要:1 设置jvm内存大小xmx, xms, Xss -Xss:规定了每个线程虚拟机栈及堆栈的大小,一般情况下,256k是足够的,此配置将会影响此进程中并发线程数的大小。 -Xms:表示初始化JAVA堆的大小及该进程刚创建出来的时候,他的专属JAVA堆的大小,一旦对象容量超过了JAVA堆的初始容量,JA
阅读全文
摘要:1. 类加载流程图, 左边是C++流程,右边是jvm流程 2. 查看汇编指令, 进入字节码目录: javap -v 类名.class , 例如: 3. 类加载流程示例: package com.zqd.day01; /** * @author ADeng * @date 2022/5/31 * @d
阅读全文