![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 187 阅读 · 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 · 126 阅读 · 1 评论 -
java虚拟机14
内存分析工具上一节中是通过jmap -histo来查看堆内存空间及对象实例情况,但是前提是程序必须是存活的,如果程序关闭了就不能查看之前的内存情况了,就需要通过以下的工具来查看内存分析工具VisualVM也是可以查看dump文件的文件->装入->选择指定的dump文件,就可以打开dump文件了上一节的cpu%项目中,虚拟机开启了-XX:+HeapDumpOnOutOfMemoryError,就是内存溢出后会自动保存dump文件,文件名形如java_pid15032.hprof原创 2021-03-26 02:51:47 · 216 阅读 · 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 · 147 阅读 · 0 评论 -
java虚拟机12
压测工具ABAb(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 · 112 阅读 · 0 评论 -
java虚拟机11
动态追踪技术底层分析什么是动态追踪不用关闭java程序重启,无侵入式的实现,即可统计java程序的运行处理信息通过java agent技术实现Java Agent 技术JVM级别的aop事前、事后、事中比如要打印方法的入参和出参,此时是需要对java代码进行修改的,但是java程序已经运行了,数据就在运行时数据区中,而class文件就在方法区中,如果要改变某一个方法,就需要替换class文件,修改相应的字节码一个JVM只能调用一个arthasmain方法原创 2021-03-23 21:54:28 · 308 阅读 · 2 评论 -
java虚拟机8
代码执行流程梳理java代码 --> class --> JVM运行时数据区(方法区)代码的执行 --> 体现在JVM中是方法的执行(class,也就是字节码)JAVA方法的调用与虚拟机栈启动main方法启动一个程序就是通过main方法启动的,因为main方法是JVM启动的入口,通常是启动一个线程来执行main方法方法调用的字节码指令方法调用一共只有5种字节码①invokestatic调用静态方法package ex8;/** *原创 2021-03-22 11:47:38 · 75 阅读 · 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 · 188 阅读 · 0 评论 -
java虚拟机9
Java中的泛型泛型是什么?泛型,即“参数化类型”,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。引入一个类型变量 T(其他大写字母都可以,不过常用的就是 T,E,K,V 等等),并且用<>括起来,并放在类名的后面。泛型类是允许有多个类型变量的。按照约定,类型参数名称命名为单个大写字母,以便可以在使用普通类或接口名称时能够容易地区分类型参数。以下是常用的类型参数名称列表:E - 元素,主要由 Java 集合(Collections)框架使用。K - 键,主要用于表示映射原创 2021-03-21 16:29:04 · 88 阅读 · 0 评论 -
java虚拟机7
一个类的生命周期类生命周期7个阶段1.加载loading加载到虚拟机的内存中,即运行时数据区2.验证verification3.准备preparation4.解析resolution其中2、3、4合起来又称为连接Linking5.初始化initialzation6.使用using7.卸载unloading垃圾回收阶段顺序阶段的顺序是不定的,能够确定顺序的是①加载、②验证、③准备、⑤初始化、⑦卸载,而④解析就不一定了,因为java是有一个原创 2021-03-19 01:41:20 · 101 阅读 · 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 · 148 阅读 · 1 评论 -
java虚拟机5
并发标记与三色标记并发垃圾回收器中为了应对并发场景需要用到三色标记算法三色标记算法把对象用三种颜色标记黑色:一般代表根对象,除了根对象以外,如果这个对象以及它的子对象都被扫描了,这种也是黑色的灰色:只扫到当前对象,但是它的子对象还没有被扫描到,这种是灰色白色:没有扫到的对象就是白色,如果扫描完所有对象后,最终是白色的为不可达对象,即垃圾对象优点可以异步执行,扫描颜色的线程进行的同时,用户线程也可以运行三色标记的问题GC并发情况下的漏标问题线程1和线程2属于垃圾原创 2021-03-16 11:41:43 · 87 阅读 · 0 评论 -
java虚拟机4
垃圾回收基础知识什么是gcminor 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 · 118 阅读 · 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 · 80 阅读 · 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 · 229 阅读 · 1 评论 -
java虚拟机1
JVM基础知识从编译到执行HelloWorld.java通过javac编译成HelloWorld.classJVM中的ClassLoader类加载器把HelloWorld.class加载到JVM中再通过字节码解释器的执行引擎运行在操作系统上在JDK底下有一个JRE(java运行时环境),里面有很多java类库在JRE底下有一个JVM,也就是java虚拟机任何一个class要运行,除了走字节码解释器执行,还可以通过JIT编译器来执行jvm把class这个字节码文件翻原创 2021-03-11 17:52:52 · 125 阅读 · 2 评论 -
jvm学习笔记4----垃圾回收机制与垃圾回收算法
垃圾回收机制与垃圾回收算法-0723回顾1.创建对象的过程,重点在于分配内存,两者方式,以及解决并发安全2.cas加本地内存缓存解决并发安全3.对象有对象头,设置对象指针,数组必须有记录长度的数据4.对象头有哈希码、gc、锁标识、线程持有的锁、偏向线程id,偏向时间戳5.对象的访问,句柄来存,就是中间多了一个指针,hotspot是直接指针,堆里面的指针直接指向数据6.方法的执行就是栈帧的执行,数据不可能拿到栈中,太大了,所以都是用引用7.垃圾回收之前必须要判断对象是否在存活,引用计数法无法解原创 2020-08-31 21:31:11 · 239 阅读 · 1 评论