![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
[编程语言]
编程语言:OOS、java language、jvm、java api、html/css/js/jsp/vue
wangx_code
这个作者很懒,什么都没留下…
展开
-
空格字符ASCII 32和160
空格字符ASCII 32和160原创 2023-02-20 11:53:38 · 798 阅读 · 0 评论 -
Java正则表达式matcher group使用
Java正则表达式matcher group使用原创 2023-02-07 17:35:10 · 441 阅读 · 0 评论 -
Java SPI的本质
Java SPI的本质1 没有SPI的时候在使用driver前,需要手动执行class.forName("com.mysql.jdbc.Drvier")加载类2 有SPI的时候(直接看DriverManager的代码)(1)用ServiceLoader加载所有Driver类,调用load方法只是清空了所有的providerspublic class DriverManager { static { load.原创 2022-09-11 14:54:07 · 270 阅读 · 0 评论 -
多线程编程遇到的一些问题
MapHashMap是非线程安全的,使用ConcurrentHashMap(注意key和value都不能为null)future1 future.get会阻塞线程,所以想要提速,把多个task提交放到List<Future>中,提交完后,循环调用future.get。更优雅的方式:Future<Boolean> future = fixedThreadPool.submit(new RecordWriterCallable(taskPluginCollec原创 2022-04-19 22:05:33 · 381 阅读 · 0 评论 -
NIO
IO操作到底是什么所有的系统I/O都分为两个阶段:等待就绪和操作。举例来说,读函数,分为等待系统可读和真正的读;同理,写函数分为等待网卡可以写和真正的写。等待数据就绪是空等,不占用CPU,但是耗时(相对于CPU操作来说);读/写操作是CPU进行memory copy,非常快。阻塞式什么阻塞是指:函数调用时没有得到返回时,当前线程被挂起(主动挂起)。同步函数和阻塞函数不是同一个意思:同步函数只是还没有返回,但是线程没有被挂起,线程还是活动的。阻塞和非阻塞、同步和异步1 有这几类概念原创 2021-05-25 12:16:07 · 87 阅读 · 0 评论 -
volatile原理 + volatile在AQS框架中的应用
volatile的作用1 保证变量的可见性:1 当前线程变量改变后,强制刷新主内存(堆内存)变量 2 所有线程每次在使用变量时都从主内存中获取2 禁止指令重排:禁止操作系统对指令的优化重排序volatile使用实例:ReentrantLock非公平锁的state值(继承AQS)就是用volatile修饰的为啥AQS的state变量用volatile?普通变量不行吗?volatile + CAS实现非阻塞式线程同步:通过Syncronized的方式当然可以实现线程同步,但是消.原创 2021-05-23 22:33:15 · 312 阅读 · 0 评论 -
CAS操作的硬件指令
1 cas操作是为了避免阻塞式同步,阻塞式同步需要OS对线程进行挂起、唤醒,比较耗费资源。所以cas阻塞本质上非阻塞式同步2 cas如何实现非阻塞式同步:(1)将线程变量累加,然后与堆中的变量值进行比较,如果符合预期则更新堆中的变量值(2)如果不符合预期,将堆中变量赋值到线程变量(3)重复(1)3 cas是依托于硬件指令:jvm定义了8个原子操作,用于堆中变量和线程变量的赋值,我的猜测是CAS指令就是组合了8个原子操作其中4个。备注:说要cas操作就说不停地比较,其实...原创 2021-05-23 16:57:30 · 410 阅读 · 0 评论 -
jvm配置
-Xms=2048m -Xmx=2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=851 堆最小和最大内存设置成一样:app启动后jvm申请xms大小的空间,不够但未达到xmx时会请求OS,这时会产生耗时;生产上一天机器只运行一个应用的话,不产.原创 2021-02-22 19:31:49 · 151 阅读 · 0 评论 -
[编程语言]类加载器、Class文件格式、JVM内存模型、JVM线程模型、GC、JVM问题及调优
java内存区和线程模型如下图:1 java内存分为线程共享区和线程独有区2 每启动一个线程jvm为其分配程序计数器、虚拟机栈和本地方法栈。 程序计数器:指示执行的字节码行号。 虚拟机栈:执行一个方法会在虚拟机栈上创建一个栈帧,用户存储方法的局部变量表、操作数栈、动态链接和方法出口。 本地方法栈:同虚拟机栈的栈帧,只是本地方法栈执行的native方法。...原创 2019-09-20 17:16:02 · 112 阅读 · 0 评论 -
[编程语言]jvm角度看synchronized
参考书籍:《深入理解java虚拟机》1 synchronized是什么?有什么用? synchronized是java中的关键字,表示对资源进行同步。作用是防止多个线程对共享资源同时操作时导致数据不一致。2 线程同步问题产生的根本原因是jvm内存模型 处理器速度和内存读取速度相差太大,于是在处理器和内存中加入了高速缓存,这样一来多处理器就会造成内存数据同步的问题,内存数据...原创 2019-09-20 11:47:53 · 163 阅读 · 0 评论