首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,073 阅读
2
类的加载
737 阅读
3
Spring Cloud OAuth2.0
725 阅读
4
SpringBoot自动装配原理
689 阅读
5
集合不安全问题
582 阅读
笔记
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
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
388
篇文章
累计收到
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
页面
统计
关于
搜索到
14
篇与
的结果
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日
197 阅读
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日
118 阅读
0 评论
0 点赞
2020-11-29
堆
Heap,一个JVM只有一个堆内存,堆内存的大小可以调节类加载器读取了类文件以后,一般会把类,方法,常量,变量……放到堆中,保存所有引用类型的真实对象堆内存中细分为三个区域:新生区(伊甸园区) young/new养老区 old永久区 perm注:GC垃圾回收主要在伊甸园区和养老区假设内存满了,会报OutOfMemoryError错误package com.sw.lesson; import java.util.Random; /** * @Author suaxi * @Date 2020/11/29 22:01 */ public class Test { public static void main(String[] args) { String s = "abcdefg"; while(true){ s += s + new Random(1234567891) + new Random(1234567891); } } } 报错如下:在Jdk 8以后,永久存储区改名为元空间。
2020年11月29日
163 阅读
0 评论
0 点赞
2020-11-29
三种JVM
1、sun公司 HotSpot2、BEA JRockit3、IBM J9 VM
2020年11月29日
52 阅读
0 评论
0 点赞
2020-11-29
栈
1、栈:数据结构2、栈:先进后出,后进先出 队列:先进先出(FIFO:First Input First Output) 喝多了吐是栈,吃多了拉是队列3、栈:栈内存,主管程序的运行,生命周期和线程同步;生命周期结束,栈内存释放(一旦线程结束,栈随之结束),对于栈来说,不存在垃圾回收问题4、栈:8大基本类型+对象引用+实例的方法5、栈运行原理:栈帧6、栈 + 堆 +方法区:交互关系
2020年11月29日
50 阅读
0 评论
0 点赞
2020-11-29
方法区
Method Area 方法区方法区被所有线程共享,所有字段和字节码,以及一些特殊方法,如构造函数,接口代码也定义在此。所有定义的方法的信息都保存在该区域,此区域属于共享区间静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存放在堆内存中,和方法区无关static,final,Class,常量池
2020年11月29日
58 阅读
0 评论
0 点赞
1
2