![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 90
为什么坚持?
人的痛苦源于对自己无能的愤怒!!!
Don't forget, a person's greatest emotional need is to feel appreciated.
莫忘记,人类情感上最大的需要是感恩。
展开
-
BIO NIO AIO 多路复用
先来说说四个概念:同步 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。阻塞阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。非阻塞非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。是不是还有点模糊,通转载 2021-03-24 17:33:27 · 326 阅读 · 0 评论 -
G1 垃圾回收器
G1内存分布:region 每一个划分的区域old 老年代survivor 幸存区eden 伊甸园区humongous 大空间区域(放大对象的地方)采用分而治之的思想 把一块连续的空间分成多个区域,当垃圾回收时,回收区域中,存活对象最少的区域G1 特点:并发收集压缩空闲空间不会延长GC的暂停时间更易预测GC暂停时间适用于不需要很高吞吐量的场景G1 吞吐量低 响应时间200ms PS 的吞吐量高,但响应时间长ZGC 垃圾回收器用的是颜色指针G1 垃圾回原创 2020-06-09 08:45:02 · 502 阅读 · 1 评论 -
Arthas 快速入门
Arthas 下载:curl -O https://alibaba.github.io/arthas/arthas-demo.jarcurl -O 下载Arthas 启动:java -jar arthas-demo.jar原创 2020-06-07 22:32:15 · 696 阅读 · 0 评论 -
JVM调优
常见垃圾回收器组合参数设定:(1.8)-XX:+UseSerialGC = Serial New (DefNew) + Serial Old小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器-XX:+UseParNewGC = ParNew + SerialOld这个组合已经很少用(在某些版本中已经废弃)https://stackoverflow.com/questions/34962257/why-remove-support-for-pa原创 2020-06-01 09:34:44 · 167 阅读 · 0 评论 -
垃圾回收器
什么是垃圾?没有引用的对象就是垃圾怎么判断是否是垃圾?reference count 引用计数法 (python用到垃圾回收)每有一个对象引用,数量加1缺点:不能解决循环引用Root Searching 根可达算法什么是跟对象线程栈变量 每一个线程对应一个栈,每一个方法对应一个栈中的栈针,栈针中的对象就是变量静态变量: 每一个静态变量指向的初始化的对象常量池: 有对象指向常量池中的对象的对象(A.class 用到 常量池中B.class的情况 A就是根对象)JN原创 2020-05-31 15:26:05 · 249 阅读 · 1 评论 -
Java运行时数据区和常用指令
run-time data areas 存储分布线程共享区域:每一个线程对应一个栈每一个栈由一个个栈针组成每一个方法对应一个栈针比如main方法里面调用一个A方法 那一共有两个栈针,A方法执行完,栈针就弹出去了每一个线程都有自己独有的PC 用于CPU的切换,记录当前线程执行到哪里了**栈针的组成1局部变量表2 操作数栈3 动态链接 A()方法调用B()方法 dynamic linking 就是A方法指向常量池中B方法的指针4 return address 返回值原创 2020-05-27 08:45:13 · 168 阅读 · 0 评论 -
jvm对象创建过程和存储布局
java并发内存模型工作内存为java线程的内存主内存为JVM内存voliatile 会让每个线程实时读取主内存数据对象的创建过程class loading 加载class到内存汇总class linkingverification 校验是否语句满足JVM规范preparation 初始化提供默认值resolution class解析class initializing 提供初始值申请对象内存成员变量赋默认值调用构造方法成员变量顺序赋初始值执行构原创 2020-05-24 16:08:20 · 133 阅读 · 1 评论 -
JMM
硬件存储器的层次结构:CPU内部CPU内部,不共享 速度快CPU 共享多个CPU共享资源,相对速度慢如何保证数据一致性:协议很多 intel 用MESIhttps://www.cnblogs.com/z00377750/p/9180644.html现代CPU的数据一致性实现 = 缓存锁(MESI …) + 总线锁cache line读取缓存以cache line为基本单位,目前64bytes位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互原创 2020-05-21 08:48:29 · 227 阅读 · 0 评论 -
LodeClass 双亲委派机制
类加载器Bootstrap (加载lib/rt.jar charset.jar 等核心类)Extension (加载 jre/lib/ext 包下的内容)App (通常自己写的类)CustomClassLoader(自定义加载)双亲委派代码实现:通过parent.locadClass(name) 实现一个递归查询最终查到顶级父类BootStrap有没有加载过如果顶级父类没加载过(c==null),再通过findClass来继续查找什么是双亲委派自下而上的检验是否加载过,如果加原创 2020-05-19 08:52:43 · 324 阅读 · 0 评论 -
浅入了解JVM
java从编译到执行的过程我们写的代码是.java文件通难过javac编译成.class文件当调用java命令时,会加载到classLoader内存中java类库 String Object 等等加载在内存中会调用字节码解释器或JIT即时编译器 解释或编译即使编译 就是常用的一些方法会编译好放在内存中,下次来直接调用执行引擎解释编译完成后,调用执行引擎执行执行引擎操作的就是系统的硬件了未完待续...原创 2020-05-16 21:44:54 · 122 阅读 · 0 评论