JVM
文章平均质量分 89
刘水镜
【欢迎阅读我的最新专栏——《SpringBoot趣味私房课》https://www.imooc.com/read/75】【欢迎加入「开发者」技术交流群:168965372】【群链接:https://jq.qq.com/?_wv=1027&k=Inxd5Aa9】
展开
-
Volatile:JVM 我警告你,我的人你别乱动!
Volatile 的意思是,易变的,动荡不定的,反复无常的。volatile 的作用就是告诉 JVM,被我修饰的变量它非常善变,你要给我盯好了,一旦有风吹草动要立马通知大家;另外,你不要自作聪明的调整它的位置(为了性能重排序),它可是说翻脸就翻脸的主儿。最后,留一个小问题:内存可见性的那个程序中,就算 flag 没有被 volatile 修饰,线程顶多不是第一时间读到 flag 的修改,但也不应该一直读不到呀,这是为啥?这太反直觉了!开动你的脑筋思考一下吧!...原创 2022-08-08 11:10:20 · 345 阅读 · 1 评论 -
Java 程序在 JVM 中是怎样执行的?(一定要看到最后)
代码很简单,一个类,main()方法调用a()方法,a()方法中定义了一个int变量a,然后调用b()方法,b()方法中new了一个User对象b。一个方法被执行的时候,会创建一个栈帧,用来存放局部变量表、方法出口等信息。堆堆可谓是与程序员打交道最多的一块区域了,也是JVM中最大的一块内存区域了。面向对象的核心成员就是对象和对象的行为(也就是方法),而堆和栈刚好是管着两块儿的。b()方法执行结束,b变量销毁,断开对User实例的引用,出栈。.........原创 2022-07-16 19:20:07 · 792 阅读 · 4 评论 -
写了那么多 Java 代码,却不一定见过它的真面目
我们都知道那句著名的宣传语——「一次编写, 到处运行(Write Once, Run Anywhere)」,这是对 Java 平台无关性的精准概括。字节码 + JVM 使其平台无关,与此同时也衍生出另一个无关性——语言无关性。像 Kotlin、Groovy、Scala、Clojure、JRuby 等语言都可以运行在 JVM 之上。理论上只要能将源代码编译成符合 JVM 规范的字节码,任何语言都可以在 JVM 中运行。字节码是连接语言和 JVM 的关键桥梁,今天我们就一起聊聊这个关键人物。概览我们创建.原创 2022-02-02 14:52:49 · 2187 阅读 · 1 评论 -
菜鸟学习JVM——分代回收
分代回收上篇文章介绍了几种垃圾回收的算法,但这些算法当中并没有一个是完美的,可以代替其他所有算法,他们各自有各自的优势。因此JVM需要根据垃圾回收对象的特性,选择合适的回收算法。JVM中大部分对象的生命周期非常短,朝生夕灭;还有一些对象,他们的生命周期很长,有的甚至长生不老、寿与JVM齐。于是就有了分代的概念。分代新生代(Young Generation) +Eden +原创 2016-05-24 14:56:21 · 7845 阅读 · 12 评论 -
菜鸟学习JVM——垃圾回收算法
Java垃圾回收算法所有的垃圾回收算法都是为了解决三个问题: * 哪些内存需要回收 * 什么时候回收 * 怎么回收引用计数法(Reference Counting) 引用计数法原理很简单,给每个对象分配一个计数器,当被引用时就加一,引用失效就减一。计数器为零时,则说明该对象不可能再被使用。引用计数法效率不错,大部分情况下是个不错的算法,但它有一个非常明显的缺点,就是无法回收互相引用的对象,从原创 2016-05-20 00:34:54 · 7464 阅读 · 12 评论