![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
2. jvm
ds
多学就会融会贯通
这个作者很懒,什么都没留下…
展开
-
CAS学习记录
首先理解Cas是 一种并发的无锁机制 实现的流程是 每次都先把当前线程获得的A保存起来 线程就在运行嘛 所以要再比较一下现在的内存中最新的A(value)cas必须依赖volatile ActomicInteger中封装的value变量就是volatile的和我当初保存起来的A(prev)是否相等 compareAndSet(prevA,updateB)是boolean的 如果相等就说明没有变 那就可以对A操作更新为B 如果变了说明已经被修改了 那就不能操作 就继续循环 cas使用while(true)这原创 2020-07-08 22:16:47 · 121 阅读 · 0 评论 -
强引用 软引用 弱引用 虚引用 引用队列
jvm的四种引用都有什么 1.强引用 一般像new Object()这类的引用 只要强引用还存在 垃圾回收器永远不会回收被强引用 引用的对象 如果强引用为null 或者已经超过了引用的作用范围对象就会被回收 2.软引用 如果当前对象没有强引用引用 在垃圾回收后的内存不够了 就会回收软引用连接的对象。 通过SoftReference类实现。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。后续原创 2020-06-30 13:48:00 · 320 阅读 · 0 评论 -
垃圾回收
jvm如何判断对象是否是垃圾? 1.计数引用算法 2.可达性分析算法: 扫面堆当中的对象,由GC Roots对象作为起始点 向下搜索没有与其相连的对象就会被当作垃圾 并且回收 GC Root 一般是什么对象?(不会被回收的对象) 虚拟机栈(栈中的本地变量表)中引用的对象 JVM Stack 线程池变量 方法区中类静态属性引用的对象 static references in method area 静态变量 方法去中常量引用的对象 run-time constant pool 常量池原创 2020-05-21 23:49:47 · 193 阅读 · 0 评论 -
内存结构
程序计数器 作用: 1.记录正在执行的jvm指令的执行地址 字节码解释器会去通过改变计数器的值,向程序计数器中要下一条要执行的字节码指令的地址 2.记录现场 线程切换回来在正确的执行位置 特点:线程私有 内存不会溢出 虚拟机栈 1.线程执行需要的内存叫栈 栈中的变量都不会被垃圾回收 因为自己就销毁了 2.当前线程的方法执行需要的内存叫栈帧 2.1 每个栈帧中包含形参,方法內的局部变量表,返回值地址,接口等 2.2 方法內部的局部变量是私有的,线程安全的 线程安全:不会同时被多个线程共享的资源 线程独有原创 2020-05-12 22:53:54 · 795 阅读 · 1 评论 -
StringTable
"ab"在字符串常量池当中 字符串变量拼接 s1就是个字符串变量 s1+s2底层调用StringBuilder对两个字符串拼接 返回的这个StringBuilder 变回定义的Striing 类型 还要new String(stringbuffer); 此时在堆中开辟内存了 指向新的地址 所以和上面的“ab”不同 常量拼接 “a”+“b” 在底层是直接去常量池中找"ab"了,因为javac在编译期间会做优化,直接在编译时就把常量拼接在一起变成"ab" 常量池中已经有了"ab"这...原创 2020-05-12 22:53:25 · 152 阅读 · 0 评论