首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,085 阅读
2
类的加载
742 阅读
3
Spring Cloud OAuth2.0
726 阅读
4
SpringBoot自动装配原理
691 阅读
5
集合不安全问题
586 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
389
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
页面
统计
关于
搜索到
13
篇与
的结果
2020-12-01
JMM(Java Memory Model)
1、Java内存模型2、作用:缓存一致性协议,用于定义数据读写的规则JMM中定义了线程工作内存和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存。注:通过volilate解决共享对象可见性问题3、JMM对八种指令的使用制定了如下规则:不允许read和load、store和write操作单独出现,即:使用read必须load,使用store必须write不允许线程丢弃它最近的assign操作,即:工作变量(工作内存中)的数据改变了之后,必须告知主存不允许一个线程将没有assign的数据从工作内存同步回主内存一个新的变量必须在主内存中诞生,不允许工作内存直接使用一个未被初始化的变量,即:对变量进行use、store操作之前,必须经过assign和load操作一个变量同一时间只有一个线程能对其进行lock。多次lock后,必须执行相同次数的unlock才能解锁如果对一个变量进行lock操作,会清空所有工作内存中此变量的值,在执行引擎使用这个变量之前,必须重新load或assign操作初始化变量的值如果一个变量没有被lock,就不能对其进行unlock操作,也不能unlock一个被其他线程锁住的变量对一个变量进行unlock之前,必须把此变量同步回主内存JMM对这八种操作规则和对volilate的一些特殊规则就能确定哪些线程是安全的,哪些是不安全的
2020年12月01日
62 阅读
0 评论
0 点赞
2020-11-30
GC垃圾回收
GC的作用区域:JVM在进行GC时,并不是对这三个区域统一回收(大部分在新生代(伊甸园区))新生代幸存区(from,to)老年区GC分为两类:轻GC(普通GC)、重GC(全局GC)GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数法引用计数法:复制算法:优点:没有内存的碎片缺点:浪费了内存空间(有一半空间永远是空着的(to区))复制算法的最佳使用场景:对象存活度较低的时候(新生代)标记清除算法优点:不需要额外的空间缺点:两次扫描浪费时间,会产生内存碎片标记压缩对标记清除进行优化小结:内存效率:复制算法 > 标记清除算法 > 标记压缩 (时间复杂度)内存整齐度:复制算法 = 标记压缩 > 标记清除算法内存利用率:标记压缩 = 标记清除 > 复制算法新生代:存活率低复制算法老年代:区域大,存活率高标记清楚+标记压缩混合实现
2020年11月30日
74 阅读
0 评论
0 点赞
2020-11-30
堆内存调优
OOM错误:使用JProfiler工具分析OOM原因能够看到代码第几行出错:内存快照分析工具,MAT(Eclipse),JProfilerDebug,分析代码MAT,JPrifiler的作用:分析Dump内存文件,快速定位内存泄漏获得堆中的数据获得大的对象等等再通过JProfiler分析Dump下来的文件。
2020年11月30日
200 阅读
0 评论
0 点赞
2020-11-30
新生区、老年区、永久区
1、新生区类:诞生和成长的地方,甚至死亡伊甸园区:所有的对象都是在伊甸园区new出来的幸存者区2、老年区注:经验证,99%的对象都是临时对象3、永久区这个区域常驻内存,用来携带JDK自身携带的Class对象。Interface元数据,存储Java运行时的一些环境或类信息(这个区域不存在垃圾回收),关闭虚拟机就会释放这个区域的内存。Jdk 1.6之前:永久代,常量值在方法区中Jdk 1.7:永久代慢慢退化,去永久代,常量池在堆中Jdk 1.8之后:无永久代,常量池在元空间会出现OOM的情况:启动类加载了大量的第三方jar包;Tomcat部署的应用过多;大量动态生成的反射类不断被加载等
2020年11月30日
120 阅读
0 评论
0 点赞
2020-11-29
三种JVM
1、sun公司 HotSpot2、BEA JRockit3、IBM J9 VM
2020年11月29日
52 阅读
0 评论
0 点赞
2020-11-29
方法区
Method Area 方法区方法区被所有线程共享,所有字段和字节码,以及一些特殊方法,如构造函数,接口代码也定义在此。所有定义的方法的信息都保存在该区域,此区域属于共享区间静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存放在堆内存中,和方法区无关static,final,Class,常量池
2020年11月29日
58 阅读
0 评论
0 点赞
2020-11-29
PC寄存器
程序计数器:Program Computer Register 每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向一条指令的地址,也是即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间。
2020年11月29日
58 阅读
0 评论
0 点赞
2020-11-29
Native
编写一个多线程启动类package com.sw.lesson; /** * @Author suaxi * @Date 2020/11/29 15:56 */ public class Demo01 { public static void main(String[] args) { new Thread(() ->{ },"Thread01").start(); } } 查看start方法的源码 public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the future may have to also be added to the VM. * * A zero status value corresponds to state "NEW". */ if (threadStatus != 0) throw new IllegalThreadStateException(); /* Notify the group that this thread is about to be started * so that it can be added to the group's list of threads * and the group's unstarted count can be decremented. */ group.add(this); boolean started = false; try { start0(); //调用了start0方法 started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { /* do nothing. If start0 threw a Throwable then it will be passed up the call stack */ } } } private native void start0(); private native void start0(); /* native:凡是带了native关键字的,说明java的作用范围达不到了,会去调用底层C语言的库 进入本地方法栈 调用本地接口 JNI(Java Native Interface) JNI的作用:扩展Java的使用,融合不同的编程语言为Java所用 在内存中专门开辟一块标记区域:Native Method Stack,登记 native方法 在最终执行的时候,加载本地方法库中的方法通过JNI */
2020年11月29日
44 阅读
0 评论
0 点赞
1
2