![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 87
JVM
老蛙@
卷
展开
-
CAS与锁优化
CAS即**compare and swap**,它体现一种**乐观锁(假设不会有其他线程影响当前线程操作,如果发现其他线程影响了当前线程的操作,就回滚当前线程,重新执行)**的思想,比如多个线程要对一个共享整型变量执行+1操作:原创 2022-09-23 11:53:42 · 250 阅读 · 0 评论 -
Java内存模型——JMM
大致可以认为,基本数据类型的访问,读写都是具备原子性的(除了long、double这两个64位的类型,在运算时会被分成两个32位进行运算);如果锁住的是对象,则会通过monitorenter和monitorexit指令;如果锁住的是方法,则会通过ACC_SYCHRONIZED标识。:JIT编译器在运行时的一些优化,如果一段代码执行的先后顺序对执行结果不会有影响时,代码可能不会按照源码顺序进行执行;happens-before规定了哪些写操作对其他线程的读操作可见,它是可见性和有序性的一套规则总结。原创 2022-09-21 15:51:59 · 224 阅读 · 0 评论 -
Java类加载
应用场景想加载非classpath随意路径中的类文件都是通过接口来实现,希望解耦时,常用在框架设计这些类希望予以隔离,不同应用的同名类都可以加载,不冲突,常用于tomcat容器步骤继承ClassLoader父类要遵从双亲委派机制,重写findClass方法(在jdk1.2之前没有双亲委派机制,所以都去重写的loadClass方法,导致破坏了双亲委派机制,为了兼容以前的代码,不能禁止重写loadClass方法,现在写要注意重写findClass方法而不是loadClass方法)原创 2022-09-20 21:26:53 · 279 阅读 · 0 评论 -
语法糖
Java泛型是1.5引入的新特性,可以通过泛型来表示任意的类型,提高代码的复用性;但是泛型是不会保留到运行期的,在编译期,编译器就会对泛型进行擦除;这个特性是jdk5开始加入的,对每个基本数据类型所对应的包装类的转换提供便利,编译器会自动生成调用valueOf方法的代码来进行转换。jdk开始,新增了堆需要关闭的资源处理的特殊语法,即try-with-resources;一个类没有写构造方法时,会有一个默认的无参构造方法,这是编译器帮我们加上的。jdk5引入,遍历数组、集合时,可以通过foreach的方式。原创 2022-09-18 21:56:42 · 543 阅读 · 0 评论 -
垃圾回收机制
在对象中加入一个计数,表示这个对象被引用的数量,每当一个新的引用指向对象,引用计数+1,一个引用不再指向对象,引用计数-1;当这个引用计数为0的时候,没有引用指向这个对象了,这个对象就是垃圾。原创 2022-09-17 20:07:52 · 342 阅读 · 0 评论 -
直接内存
使用了Unsafe对象完成直接内存的分配和回收,并且回收需要主动调用freeMemory方法ByteBuffer的实现类内部,使用了Cleaner(虚引用)来检测ByteBuffer对象,一旦ByteBuffer对象被垃圾回收,那么就会由ReferenceHandler线程通过Cleaner的clean方法调用freeMemory来释放直接内存。原创 2022-09-15 15:37:51 · 194 阅读 · 0 评论 -
字符串常量池-StringTable
常量池中的字符串仅仅是符号,在第一次用到时,才会变为对象StringTable利用串池的机制,来避免重复创建字符串对象字符串变量的拼接原理是StringBuilder构建字符串常量的拼接原理是编译期优化可以使用intern方法,主动将串池中还没有的字符串对象放入串池。原创 2022-09-14 15:44:33 · 923 阅读 · 0 评论 -
JVM内存结构
Program Counter Register——程序计数器,在字节码执行过程中,原创 2022-09-11 21:48:57 · 310 阅读 · 0 评论