JVM虚拟机
文章平均质量分 91
Java可以一处编写,到处执行的真相
左耳君
一个会写代码的工程师,一个热爱生活的普通人
展开
-
读了这篇JVM,直呼真香,淦(长篇预警)
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动\这篇文章一句废话我也不打算说,建议准备好姿势阅读,收藏关注有利于随时学习!\今天看到一个特别有意思的图,想起以前刚学Java的时候听别人聊JVM的时候,大概就是这个样子,哈哈\\开头就说了废话,啊呸,进入主题,冲冲冲\JVM是Java Virtual Machine(Java虚拟机)的缩写,任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是一次编译,多次运行对于Java程序.原创 2022-05-04 10:30:07 · 148 阅读 · 0 评论 -
【HotSpot、G1】垃圾回收算法和垃圾收集器
前言上一篇我们说了如何判断一个对象是否存活,这一篇呢,就是接着前面几篇文章来的,我们知道堆中分为年轻代和老年代,有着不同的特点;每个区域有着不同的特点,也就有了多种垃圾回收算法,每种算法也是根据内存情况进行不同程度的优化就像上一篇提到的打扫屋子,接下来就是需要找到打扫屋子的最合适的方法,比如屋子的哪些东西归为一类,哪些可以扔掉,哪些可以摆放到一起JVM的算法有很多,大鱼这里只说比较常见的四种:标记-清楚算法复制算法标记-整理算法分代收集算法说完了算法,就会介绍下JVM的流行的各种收集器,.原创 2022-05-03 11:19:50 · 932 阅读 · 0 评论 -
面试官再问你如何破坏双亲委派,就把这篇文章扔给他
前言我们每天都在写Java代码,最常见的User.java这种文件,但是这种文件是如何被虚拟机识别的呢,你有没有思考过这个过程首先我们写的Java文件会被编译成class文件,因为机器不认识getName这种,机器只认识010101编译完成的class文件会被加载到虚拟机中,用于完成我们的任务,那这个加载是什么时候开始呢,加载的过程是什么样子的呢类加载时机先来肝个图,类的加载过程类从被加载到虚拟机开始,到卸载出内存为止,它的整个的生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个.原创 2022-05-03 11:08:45 · 181 阅读 · 0 评论 -
面试官问我:你确定JVM堆内存是共享的?
前言这应该是大鱼写的RocketMQ的第5篇文章了,之前四篇分别是我们在之前一篇关于JVM内存结构中,介绍了两个比较常见的区域是堆内存和栈内存,堆和栈的区别,大家应该也听得耳朵都出茧子了堆是线程共享的内存区域,栈是线程独享的内存区域;堆中主要存放的是对象实例,栈中存放的是各种基本数据类型和对象的引用但是呢,大鱼前几天去面试,面试官也问了我这个问题,而且没有就此罢休,而是问了我很多平时遇不到的问题,不过好在大鱼我曾经在看某一技术博主的文章的时候,跟着多学习了下Java堆的区域都是线程共享的吗?当.原创 2022-05-03 10:57:34 · 198 阅读 · 0 评论 -
JVM如何判断哪些对象可以回收?
前言我们上一篇分析的是JVM的内存分布,分为堆内存、虚拟机栈、本地方法栈、方法区以及程序计数器等主要区域;各个区域的特点我也就不啰嗦了,上一篇已经分析过了大鱼今天在家本来是闲暇的一天,很舒适,结果这个时候,妈妈敲门进来我房间了,咨询我有没有时间帮忙打扫一下父母的房间;(没有时间当然我不能这么说了,我是个炒鸡孝顺的好孩子,当然了,妈妈,当然有时间了啊,now go,我的乖乖,这么乱的屋子,不对啊,平时都是很干净的啊(内心想逃,后悔,想拒绝不对啊,妈,为什么房间这么乱啊,这有的东西我也不知道要不要.原创 2022-05-03 10:45:17 · 172 阅读 · 0 评论 -
面试官问我平时写的Bug的存储位置(逃逸分析、标量替换、锁消除)
前言爱生活,爱技术,更爱左耳君,么么哒😘说到写bug,我们每天都在用Java实现着各种需求,我们实现的Java程序每天都运行在每个机器的虚拟机上,但是你了解你写的代码的具体存储位置吗说实话,这个东西,在我刚开始学Java的时候,我听到JVM虚拟机这个名词的时候,我的感觉是这个样子的(惭愧你们肯定也会有些疑问吧,平时写的代码每一部分都是存储在哪里的?是的,没错,我的内心就像拖着下巴的那位,除了,模样,emmm…虽然现在也不是多么的精通,但是比之前好太多了,不是涉及很底层的东西也算是了解一些,当.原创 2022-05-03 10:44:41 · 222 阅读 · 0 评论 -
面试官最常问的垃圾回收器CMS
前言随着互联网技术的发展,线上用户量的大量增加,性能问题变得尤为重要,我们可以通过增大JVM的各项内存来解决一部分问题,但是这样总是片面的应该双管齐下,既要从硬件方面变得逐渐强大,底层软件方向也不能落下发展,于是乎垃圾收集器的发展也变得很重要熟悉JVM的小伙伴应该都知道JVM的内存结构,大致分为堆、栈、本地方法栈、方法区和程序计数器,简单回忆下各个区域的作用吧堆:用来存储对象本身的以及数组(数组引用是存放在Java栈中的)。堆是被所有线程共享的,在JVM中只有一个堆栈:存放的是一个个的栈帧,每个.原创 2022-05-02 09:18:33 · 415 阅读 · 0 评论 -
JVM 发生 OOM 的 8 种原因、及解决办法
本文原创:JVM 发生 OOM 的 8 种原因、及解决办法小A:xx服务又宕机了小B:歪日,咋搞的,登上去看看咋回事小A:又OOM了,不知道哪个**写的代码,一坨*一样。撸Java的同学,多多少少会碰到内存溢出(OOM)的场景,但造成OOM的原因却是多种多样。堆溢出这种场景最为常见,报错信息:java.lang.OutOfMemoryError: Java heap space原因1、代码中可能存在大对象分配2、可能存在内存泄露,导致在多次GC之后,还是无法找到一块足够大的内存容纳原创 2022-05-01 19:38:50 · 2294 阅读 · 0 评论 -
【JVM系列】读懂Java虚拟机(JVM)这一篇就够了!
读懂Java虚拟机(JVM)这一篇就够了!内存管理1、运行时数据区域1.1 堆1.2 虚拟机栈1.3 本地方法栈1.4 方法区栈1.5 程序计数器1.6 直接内存2、Java对象2.1 对象的创建2.2 对象的内存布局2.3 对象的访问定位垃圾回收和内存分配3.1 对象已死吗?3.2 垃圾回收算法3.2.1 几种算法思想3.2.2 HotSpot算法实现3.3 垃圾收集器3.3.1 Serial新生代收集器3.3.2 ParNew新生代收集器3.3.3 ParNew Scanvenge收集器3.3.4 Se原创 2020-06-19 12:09:53 · 851 阅读 · 1 评论