
jvm
文章平均质量分 78
it噩梦
好记性不如烂笔头
展开
-
java finalize原理
文章目录finalizefinalize 原理finalize 缺点finalize它是 Object 中的一个方法,如果子类重写它,垃圾回收时此方法会被调用,可以在其中进行资源释放和清理工作将资源释放和清理放在 finalize 方法中非常不好,非常影响性能,严重时甚至会引起 OOM,从 Java9 开始就被标注为 @Deprecated,不建议被使用了finalize 原理对 finalize 方法进行处理的核心逻辑位于 java.lang.ref.Finalizer 类中,它包含了名.原创 2022-02-03 20:56:23 · 1440 阅读 · 0 评论 -
JAVA Metrics 进阶
文章目录Metrics Pluginsdead lock health check自定义health checkMetrics PluginsMetrics 之所以受欢迎,除了提供了一套度量指标的标准外,其源代码层次分明、可扩展性强也是一个非常重要的因素。再Github上相关的开源项目也很多,介绍两款插件。dead lock health check <dependency> <groupId>io.dropwizard.metrics<.原创 2021-12-03 11:06:02 · 1001 阅读 · 0 评论 -
通过JMH测试公平锁与非公平锁
@BenchmarkMode(Mode.AverageTime)@OutputTimeUnit(TimeUnit.MICROSECONDS)@Measurement(iterations = 10)@Warmup(iterations = 5)@State(Scope.Group)public class FairAndUnfairTest { @Param({"1", "2"}) private int type; private static Lock lock;.原创 2021-11-30 21:10:39 · 293 阅读 · 3 评论 -
JAVA Metrics 度量工具入门
前言Metrics是一个给JAVA服务的各项指标提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控。官方文档:github:https://github.com/dropwizard/metrics官方文档:https://metrics.dropwizard.io/4.2.0/getting-started.html环境搭建 <dependency> <groupId>io.dro.原创 2021-11-30 22:45:00 · 1083 阅读 · 0 评论 -
JMH高级用法
前言虽然JMH可以帮我们更好了解我们所编写的代码,但是如果我们所编写的JMH基准测试本身就有问题,那就很难起到指导作用。编写正确的微基准测试用例现代的Java虚拟机越来越智能,它在类的早期编译阶段、加载阶段以及后期的运行时都可以为我们的代码进行相关的优化,比如Dead Code的擦除、常量的折叠、循环的打开,甚至是profile的优化。避免DCE(Dead Code Elimination)所谓dead code 是指JVM为我们擦去了上下文无关的代码,甚至经过计算后不会用到的代码。@Benc.原创 2021-11-29 22:00:00 · 419 阅读 · 0 评论 -
JMH快速入门
JMH简介JMH是专门用于代码微基准测试的工具集。JMH是由实现Java虚拟机的团队开发的,由于现在JVM已经变得越来越智能,在Java文件的编译阶段、类的加载阶段,以及运行阶段可能进行了不同程度的优化,因此开发者...原创 2021-11-26 22:30:00 · 727 阅读 · 0 评论 -
jvisualvm远程监控springboot
添加参数java -Djava.rmi.server.hostname=192.168.56.112 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar fast-common-example-web-0.0.1-SN..原创 2021-09-29 21:15:00 · 195 阅读 · 0 评论 -
堆、栈、方法区溢出汇总
原创 2020-11-26 19:06:46 · 940 阅读 · 0 评论 -
快速了解 Java Agent
文章目录前言看一个例子统计方法调用时间前言jdk1.5以后引入了javaAgent技术,javaAgent是运行方法之前的拦截器。我们利用javaAgent和ASM字节码技术,在JVM加载class二进制文件的时候,利用ASM动态的修改加载的class文件。看一个例子创建PreMainAgent类public class PreMainAgent { /** * 在这个 premain 函数中,开发者可以进行对类的各种操作。 * 1、agentArgs 是 p.原创 2020-07-06 16:58:25 · 476 阅读 · 1 评论 -
ThreadLocal父子线程传递的坑
文章目录前言InheritableThreadLocaltransmittable-thread-local总结前言如果子线程想要拿到父线程的中的ThreadLocal值怎么办呢?看下下面代码public class ThreadLocalParentChild { public static void main(String[] args) { final ThreadLocal threadLocal = new ThreadLocal() { .原创 2020-07-03 09:31:37 · 1197 阅读 · 0 评论 -
简析线程上下文ThreadLocal
文章目录前言ThreadLocal 简单介绍ThreadLocal常用方法介绍initialValuesetget看看ThreadLocalMap看个例子前言在有些时候,单个线程执行任务非常多的时候,后一个步输入是前一个步骤的输出,我们有时候会采用责任链模式,但是调用链路长了以后,这种传参方式会显得冗余,于是就有了线程上下文的设计,每个线程会有不同的参数实例。原因是每个线程Thread.currentThread()作为key,这样就可以保证线程的独立性。需要注意的是,我们会一般用Map存储,.原创 2020-07-01 13:53:39 · 777 阅读 · 1 评论 -
简单介绍七种单例模式
前言原创 2020-06-30 15:38:48 · 1278 阅读 · 1 评论 -
又被问到代码执行顺序?来看看init和clinit吧
前言之前面试的时候经常会被问到,代码的执行顺序,偶尔一次蒙对了,还会继续被怼能解释下为什么么?下面就看看这到底怎么解init和clinit区别init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法,也就是在jvm进行类加载—–验证—-解析—–初始化,中的初始化阶段jvm会调用clinit方法。init是instance实例构造器,对非静态变量解析初始化,而clinit是class类构造器对.原创 2020-06-29 18:35:43 · 504 阅读 · 0 评论 -
类的命名空间
前言每一个类加载器都有各自的命名空间,命名空间是由该加载器及其所有父加载器所构成的,因此在每个类加载器中同一个class都是独一无二的。public class NameSpace { public static void main(String[] args) throws ClassNotFoundException { ClassLoader classLoader = NameSpace.class.getClassLoader(); Class<.原创 2020-06-27 14:14:53 · 954 阅读 · 0 评论 -
可以自定义java.lang.String么?
前言记一次阿里面试的时候的一道面试题,被问到可以自定义java.lang.String这个类,让你自定义的类加载器进行加载么?分析ClassLoader跟着这个loadClass一路追踪,首先找到了defineClass接着我们再看preDefineClass这个方法下面是preDefineClass方法的源码可以看到JVM不允许你这样做的,会出现java.lang.SecurityException,JVM做了安全检查的,几乎也没有人定义与JDK核心类库完全限定名的类。...原创 2020-06-27 10:38:29 · 703 阅读 · 0 评论 -
JVM类加载器
前言顾名思义,类的加载器就是负责类的加载职责,每一个class都需要由它的类加载器和这个类本身确立其在JVM中的唯一性,这也就是运行时包。JVM中内置的三大类型加载器JVM提供了三种累加器,分别是BootStrap Class Loader,Ext Class Loader ,Application ClassLoader,不同的类加载器负责不同的类加载到JVM内存之中,并且它们之间严重遵循着父委托机制。根类加载器介绍根类加载器也称Bootstrap 加载器,它是由C++编写的,主要负责虚拟.原创 2020-06-25 23:02:12 · 282 阅读 · 0 评论 -
类的加载过程
文章目录类的加载过程及简介类的主动调用类的被动调用类的加载过程详解类的加载过程及简介类的加载过程,可分为三个阶段,加载、连接、初始化。加载阶段,加载类的二进制文件,其实就是class文件连接又可以分为三个:验证,保证类的正确性,class的版本,class文件的魔术因子是否正确。准备,为类的静态变量分配内存,并且为其初始化默认值。解析,把类中的符号引用转换为直接引用。初始化,为类的静态变量赋予默认的初始值类的主动调用JVM规范规定了以下六种主动使用类的场景通过n.原创 2020-06-25 10:14:53 · 192 阅读 · 0 评论 -
简单尝试tomcat8优化的一些小技巧
文章目录前言部署测试用的springboot项目改造`springboot`打成`war`包项目部署web应用使用Apache JMeter进行测试下载安装运行创建测试用例添加线程组,使用线程模拟用户的并发添加http请求添加请求监控聚合报告调整tomcat参数进行优化禁止AJP服务设置线程池最大线程数为500,初始为50最大线程数为1000,初始为200最大线程数为5000,初始为1000设置...原创 2020-01-26 18:34:22 · 100 阅读 · 0 评论 -
【JVM】垃圾收集器以及内存分配
文章目录前言串行垃圾收集器编写测试代码设置垃圾回收为串行收集器并行垃圾收集器ParNew垃圾收集器ParallelGC垃圾收集器CMS垃圾收集器测试G1垃圾收集器(重点)原理Remembered Set(已记忆集合)Mixed GC全局并发标记拷贝存活对象G1收集器相关参数测试对于G1垃圾收集器优化建议前言前面分享了垃圾回收的算法,还需要有具体的实现,在jvm中,实现了多种垃圾收集器,包括:...原创 2020-01-11 10:39:25 · 196 阅读 · 0 评论 -
【JVM】面试题之常见的垃圾回收算法
文章目录前言什么是垃圾回收?常见的垃圾回收算法引用计数法原理优缺点什么是循环引用?标记清除法原理优缺点标记压缩算法原理优缺点复制算法JVM中年轻代内存空间优缺点分代算法前言面试之中,很多时候会被问到常见的垃圾回收算法,以及优缺点还有使用场景。这些都是常见的问题,今天总结一篇,方便以后查阅,如果有什么出入,还请读者多多提出写问题,多谢!什么是垃圾回收?程序的运行必然需要申请内存资源,无效的...原创 2020-01-05 15:10:13 · 1691 阅读 · 9 评论 -
【JVM】面试题之死锁及问题是怎么定位
文章目录前言回顾线程的状态死锁产生的条件构造死锁jstack命令分析前言之前面试的时候被问到死锁这块的问题,借着最近学习jvm来总结下死锁相关的知识。如果有地方写的不到位的地方,麻烦读者及时提出,放在评论区,我这边也好及时改正。回顾所谓,温故而知新,首先回顾下,我们之前学过的线程的状态以及死锁产生的条件。线程的状态在Java中线程的状态一共被分成6种:初始态(NEW)创...原创 2020-01-05 10:28:26 · 1201 阅读 · 1 评论 -
JVM调优No1
文章目录前言-XX参数-Xms与-Xmx参数查看jvm的运行参数运行java命令时打印出运行参数查看正在运行的java进程的参数jps命令jstat查看class加载统计查看编译统计垃圾回收统计前言说到jvm调优,之前分享了如何使用MAT工具分析堆内存溢出,正是这样,按照以往的原则,不能就这样浅尝辄止,并且之前面试的时候经常被问到,jvm这方面的知识,于是网上搜了很多资料来学习,总结了下一些...原创 2020-01-04 16:57:32 · 446 阅读 · 0 评论 -
【JVM】比较JDK1.7和1.8的堆内存模型
文章目录jdk1.7的堆内存模型jdk1.8的堆内存模型为什么要废弃1.7中的永久区?jdk1.7的堆内存模型Young 年轻区(代)Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候, GC就会将存活的对象移到空闲的Survivor区间...原创 2020-01-02 14:37:14 · 1839 阅读 · 3 评论 -
简单使用mat工具分析java.lang.OutOfMemoryError: Java heap space
面试经常被闻到,OutOfMemoryError什么时候会出现,在网上找了很多资料,记录下学习笔记。制造一个OutOfMemoryError场景堆溢出如下代码,让程序一直往list集合里面添加数据。package com.batman.jvm;import java.util.ArrayList;import java.util.List;public class OutOfM...原创 2019-12-31 11:22:57 · 2143 阅读 · 2 评论