jvm
文章平均质量分 92
Markland_l
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java虚拟机16
深入JVM即时编译器JIT 什么是JIT? just in time compiler,即时编译器 #mermaid-svg-vsto63YlhcYCbhwL .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-vsto63YlhcYCbhwL .label text{fill:#333}#mermaid-s原创 2021-03-26 22:27:46 · 293 阅读 · 1 评论 -
java虚拟机15
直接内存 直接内存(堆外内存) 直接内存和堆外内存可以是认为是等同的,直接内存是直接向操作系统申请的,而堆是JVM提前申请的一块内存 直接内存有哪些? java的unsafe类 package ex15; import sun.misc.Unsafe; import java.lang.reflect.Field; /** * @author King老师 * 参数无效:-XX:MaxDirectMemorySize=10m */ public class UnsafeDemo {原创 2021-03-26 17:47:21 · 214 阅读 · 1 评论 -
java虚拟机14
内存分析工具 上一节中是通过jmap -histo来查看堆内存空间及对象实例情况,但是前提是程序必须是存活的,如果程序关闭了就不能查看之前的内存情况了,就需要通过以下的工具来查看 内存分析工具 VisualVM 也是可以查看dump文件的 文件->装入->选择指定的dump文件,就可以打开dump文件了 上一节的cpu%项目中,虚拟机开启了-XX:+HeapDumpOnOutOfMemoryError,就是内存溢出后会自动保存dump文件,文件名形如java_pid15032.hprof原创 2021-03-26 02:51:47 · 318 阅读 · 2 评论 -
java虚拟机13
JVM性能调优 JVM调优分类 1.JVM预调优 根据业务场景预估,预估需要使用的服务器资源容量、JVM堆内存的配置 2.优化JVM运行环境(慢、卡顿等) 2.优化JVM运行环境(慢、卡顿等) 常见的手段就是重启,但是不可取 这种问题是不明显的,像慢和卡是需要有数据指标的 3.解决JVM中的问题(OOM等) 内存溢出是最明显的问题 调优规划及怎么进行预调优 调优规划 ①业务场景设定 场景1:注重吞吐量,让系统的tps更高,parallel scavenge的吞吐量是最大的,单一时间做单一事 场原创 2021-03-25 01:43:04 · 257 阅读 · 0 评论 -
java虚拟机12
压测工具AB Ab(Apache Bench) 安装 yum -y install httpd-tools 测试 get 请求接口 ab -c 10 -n 100 http://www.test.api.com/test/login?userName=test&password=test -c后面的10是10个并发,-n后面的100是100个总请求 测试 post请求接口 ab -c 10 -n 100 -p ‘post.txt’ -T ‘application/x-www-form原创 2021-03-24 16:59:44 · 193 阅读 · 0 评论 -
java虚拟机11
动态追踪技术底层分析 什么是动态追踪 不用关闭java程序重启,无侵入式的实现,即可统计java程序的运行处理信息 通过java agent技术实现 Java Agent 技术 JVM级别的aop 事前、事后、事中 比如要打印方法的入参和出参,此时是需要对java代码进行修改的,但是java程序已经运行了,数据就在运行时数据区中,而class文件就在方法区中,如果要改变某一个方法,就需要替换class文件,修改相应的字节码 一个JVM只能调用一个arthas main方法原创 2021-03-23 21:54:28 · 465 阅读 · 2 评论 -
java虚拟机8
代码执行流程梳理 java代码 --> class --> JVM运行时数据区(方法区) 代码的执行 --> 体现在JVM中是方法的执行(class,也就是字节码) JAVA方法的调用与虚拟机栈 启动main方法 启动一个程序就是通过main方法启动的,因为main方法是JVM启动的入口,通常是启动一个线程来执行main方法 方法调用的字节码指令 方法调用一共只有5种字节码 ①invokestatic 调用静态方法 package ex8; /** *原创 2021-03-22 11:47:38 · 164 阅读 · 0 评论 -
java虚拟机10
JDK为我们提供的工具 命令行工具 jps:虚拟机进程状况工具 jstat:虚拟机统计信息监视工具 jinfo:java配置信息工具 jmap:java内存映像工具 jhat:虚拟机堆转储快照分析工具 jstack:java堆栈跟踪工具 可视化工具 JConsole:java监视与管理控制台 VisualVM:多合一故障处理工具 jps 第一列代表进程号,后面代表具体的进程,但是第二列可能空缺 jps -q 只显示进程号 jps -m 显示更多信息 jps -l 显示全路原创 2021-03-22 11:11:32 · 278 阅读 · 0 评论 -
java虚拟机9
Java中的泛型 泛型是什么? 泛型,即“参数化类型”,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。 引入一个类型变量 T(其他大写字母都可以,不过常用的就是 T,E,K,V 等等),并且用<>括起来,并放在类名的后面。泛型类是允许有多个类型变量的。 按照约定,类型参数名称命名为单个大写字母,以便可以在使用普通类或接口名称时能够容易地区分类型参数。以下是常用的类型参数名称列表: E - 元素,主要由 Java 集合(Collections)框架使用。 K - 键,主要用于表示映射原创 2021-03-21 16:29:04 · 167 阅读 · 0 评论 -
java虚拟机7
一个类的生命周期 类生命周期7个阶段 1.加载loading 加载到虚拟机的内存中,即运行时数据区 2.验证verification 3.准备preparation 4.解析resolution 其中2、3、4合起来又称为连接Linking 5.初始化initialzation 6.使用using 7.卸载unloading 垃圾回收 阶段顺序 阶段的顺序是不定的,能够确定顺序的是①加载、②验证、③准备、⑤初始化、⑦卸载,而④解析就不一定了,因为java是有一个原创 2021-03-19 01:41:20 · 192 阅读 · 0 评论 -
java虚拟机6
Class类文件结构 JVM的无关性 平台无关性:一次编写,到处运行 语言无关性:字节码(Byte-Code) .java通过javac编译成class文件 .rb通过jrubyc编译成class .groovy通过groovyc编译器编译成class 其他于洋通过对应的编译器编译成class文件,kafka是通过scala写的,也是可以在jvm上运行的 字节码 向后兼容性比较好 class在jdk1.2就稳定下来了,基本上没修改了 字节码除了class文件这种磁盘文件,也可以通过类加原创 2021-03-17 01:35:20 · 290 阅读 · 1 评论 -
java虚拟机5
并发标记与三色标记 并发垃圾回收器中为了应对并发场景需要用到三色标记算法 三色标记算法 把对象用三种颜色标记 黑色:一般代表根对象,除了根对象以外,如果这个对象以及它的子对象都被扫描了,这种也是黑色的 灰色:只扫到当前对象,但是它的子对象还没有被扫描到,这种是灰色 白色:没有扫到的对象就是白色,如果扫描完所有对象后,最终是白色的为不可达对象,即垃圾对象 优点 可以异步执行,扫描颜色的线程进行的同时,用户线程也可以运行 三色标记的问题 GC并发情况下的漏标问题 线程1和线程2属于垃圾原创 2021-03-16 11:41:43 · 181 阅读 · 0 评论 -
java虚拟机4
垃圾回收基础知识 什么是gc minor gc/young gc:对新生代(eden、from、to----1/3)进行垃圾回收 major gc(不同地方不一样,需要根据出处的上下文理解,不同地方不一样,有的只是老年代,有的是所有区域)/old gc(更好的说法,只针对老年代,cms):对老年代(tunured----2/3)进行回收 full gc(不仅是新生代、老年代、还要加上方法区(1.7之前是永久代,jdk1.8及之后是元空间)) 分代回收理论 1.大部分对象都是朝生夕死 — 新生代(98%原创 2021-03-15 18:31:55 · 191 阅读 · 0 评论 -
java虚拟机3
对象的创建过程 package ex3; /** * @author King老师 * JVM遇到new关键字 * **/ public class ObjectCreate { private int age; private boolean isKing; public static void main(String[] args) { ObjectCreate objectCreate = new ObjectCreate();//原创 2021-03-15 11:42:40 · 152 阅读 · 0 评论 -
java虚拟机2
JVM内存处理全流程 实例 package ex2; /** * @author King老师 * VM参数 * -Xms30m -Xmx30m -XX:MaxMetaspaceSize=30m * */ public class JVMObject { public final static String MAN_TYPE = "man"; // 常量 public static String WOMAN_TYPE = "woman"; // 静态变量 publ原创 2021-03-12 02:36:43 · 296 阅读 · 1 评论 -
java虚拟机1
JVM基础知识 从编译到执行 HelloWorld.java通过javac编译成HelloWorld.class JVM中的ClassLoader类加载器把HelloWorld.class加载到JVM中 再通过字节码解释器的执行引擎运行在操作系统上 在JDK底下有一个JRE(java运行时环境),里面有很多java类库 在JRE底下有一个JVM,也就是java虚拟机 任何一个class要运行,除了走字节码解释器执行,还可以通过JIT编译器来执行 jvm把class这个字节码文件翻原创 2021-03-11 17:52:52 · 179 阅读 · 2 评论 -
jvm学习笔记4----垃圾回收机制与垃圾回收算法
垃圾回收机制与垃圾回收算法-0723 回顾 1.创建对象的过程,重点在于分配内存,两者方式,以及解决并发安全 2.cas加本地内存缓存解决并发安全 3.对象有对象头,设置对象指针,数组必须有记录长度的数据 4.对象头有哈希码、gc、锁标识、线程持有的锁、偏向线程id,偏向时间戳 5.对象的访问,句柄来存,就是中间多了一个指针,hotspot是直接指针,堆里面的指针直接指向数据 6.方法的执行就是栈帧的执行,数据不可能拿到栈中,太大了,所以都是用引用 7.垃圾回收之前必须要判断对象是否在存活,引用计数法无法解原创 2020-08-31 21:31:11 · 325 阅读 · 1 评论
分享