- 博客(22)
- 收藏
- 关注
原创 多样化的编程模型:并发与并行策略
因为经常看着某些框架设计的编程模型很晕,所以自己梳理总结了一下编程模型的分类,总共六个大类,基本所有常见框架设计的编程模型都是基于这六个大类来实现的,如果有错误的地方,请见谅并不吝赐教,感谢!
2024-11-01 15:39:46
517
转载 happens-before是什么?JMM最最核心的概念,看完你就懂了
在 Java 语言里面,Happens-Before 的语义本质上是一种可见性,A Happens-Before B 意味着 A 事件对 B 事件来说是可见的,无论 A 事件和 B 事件是否发生在同一个线程里。例如 A 事件发生在线程 1 上,B 事件发生在线程 2 上,Happens-Before 规则保证线程 2 上也能看到 A 事件的发生。JMM的设计分为两部分,一部分是面向我们程序员。
2023-04-04 13:37:57
122
转载 一篇文章搞懂Java内存模型(详解)
Java 内存模型保证了 read、load、use、assign、store、write、lock 和 unlock 操作具有原子性,例如对一个 int 类型的变量执行 assign 赋值操作,这个操作就是原子性的。对前面的线程不安全示例中的 cnt 变量使用 volatile 修饰,不能解决线程不安全问题,因为 volatile 并不能保证操作的原子性。所有的变量都存储在主内存中,每个线程还有自己的工作内存,工作内存存储在高速缓存或者寄存器中,保存了该线程使用的变量的主内存副本拷贝。
2023-03-31 11:01:24
478
转载 JAVA 内存模型(主内存,工作内存)
3.线程之间无法直接访问对方的工作内存中的变量,线程间变量的传递均需要通过主内存来完成,即:线程、主内存、工作内存。Load(加载):作用于工作内存中的变量,把read操作从主内存中得到的变量的值放入工作内存的变量副本中。Write(写入):作用于主内存中的变量,把store操作从工作内存中得到的变量的值放入主内存的变量中。Read(读取):作用于主内存中的变量,把一个变量的值从主内存传输到线程的工作内存中。Store(存储):作用于工作内存中的变量,把工作内存中的一个变量的值传送到主内存中。
2023-03-28 17:00:31
412
转载 JVM内存结构区介绍
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)1.栈区每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。2.堆区存储的全部是对象实例,每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。 j
2023-03-21 21:28:57
106
转载 JVM内存结构、Java内存模型以及Java对象模型之间的区别
我们再来区分下JVM内存结构、 Java内存模型 以及 Java对象模型 三个概念:JVM内存结构,和Java虚拟机的运行时区域有关。Java内存模型,和Java的多线程并发编程有关。Java对象模型,和Java对象在虚拟机中的表现形式有关。
2023-03-21 21:05:32
93
转载 为什么32位的系统内存中指针类型都占用4个字节的内存呢
为什么32位的系统内存中指针类型都占用4个字节的内存呢在学习过程中知道,一个任何类型的指针变量所占的字节大小都为4个字节。这是为什么呢?内存是由字节组成的,每个字节都有一个编号。指针变量主要是存放相同数据类型的变量的首地址。这里的这个地址其实就是内存的某个字节的编号。而这个编号的确定是与地址总线有关。如果地址总线是32位,则它的寻址范围是0~2^32(0~4G)。所以为一个字节编址就由32个0或者1组成。例如第一个字节的编址是32个0,最后一个的编址是32个1。一个字节有8位,32位则需要4个字节。
2021-03-02 16:41:46
3924
原创 Windows平台配置Git管理单个或多个SSH密钥、IntelliJ IDEA使用Git
目录需求准备工作配置用户信息Git的验证方式生成SSH-KEY一、配置单个SSH1. 复制你的公钥内容到第三方Git服务器2. 测试SSH密钥二、配置多个SSH三、上传本地项目到第三方Git服务器(针对新工程)四、使用IntelliJ IDEA从第三方Git服务器拉取工程到本地需求a. 配置一个 DevCloud 账号b. 配置两个不同...
2019-11-01 15:34:35
7805
2
原创 浅谈几大常用maven插件作用
仅个人看法,如有不对的地方,请各位大佬指正。参考:1.https://blog.youkuaiyun.com/bluishglc/article/details/75961182.https://blog.youkuaiyun.com/ziwuzhulin/article/details/877994853.https://blog.youkuaiyun.com/qq_39653507/article/deta...
2019-05-06 18:06:40
5357
原创 @CacheEvict中的allEntries与beforeInvocation的区别
在spring cache中,@CacheEvict是清除缓存的注解。其中注解参数可以只有value,key意思是清除在value值空间中的key值数据,此时默认在当前注解方法成功执行之后再清除。这时候就会存在一个问题,也许你的注解方法成功执行了删除操作,但是后续代码抛出异常导致未能清除缓存,下次查询时依旧从缓存中去读取,这时查询到的结果值是删除操作之前的值。有一个简单的解决办法,在注解参数里
2017-12-19 15:24:53
17164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人