JVM
文章平均质量分 91
凯哥Java
这个作者很懒,什么都没留下…
展开
-
一个Java类在运行时候,变量是怎么在JVM中分布的呢?
JVM学习第三篇思考:一个Java类在Jvm内存中是怎么存在的又名:Java虚拟机的内存模型(JMM)是什么样的.通过前面两篇文章的学习,我们知道了一个Java类的生命周期及类加载器。我们可以得到如下两幅图:类生命周期:编辑父类委托机制:编辑思考:编辑我们编写的类中的变量、方法、对象这些都需要内存存放的。那么在运行时候这些数据在Java虚拟机内存中是怎么存放的呢?本文目标:凯哥(凯哥Java:kaigejava)希望通过本原创 2021-07-02 10:27:41 · 137 阅读 · 0 评论 -
JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇
JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇在上一篇《JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇》中咱们知道类一个Java类的生命周期需要经历以下七个阶段:类加载、验证、准备、解析、初始化、使用、卸载。同时,我们对每个阶段都做了简单介绍。于是我们就得到了如下的:编辑今日目标:jvm在什么时候会去加载一个类?类加载器和双亲委派机制是什么?上一篇问题思路解析jvm在什么时候会去加载一个类?我们既然知道了一个Java类的生命周期。那么原创 2021-06-29 15:02:55 · 107 阅读 · 3 评论 -
JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇
JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题)。我们也知道我们Java程序员编写的程序代码文件是*.java的,而JRE运行的是*.class的文件。所以,我们需要将java文件编译成class文件然后才可以。那么,你有没有想过,一个java文件是怎么运行起来的呢?中间都经历了哪些环节呢?我们都知道JVM是Java虚拟机,那么,有没有思考过JVM的内存模型是什么呢?我们new出来的原创 2021-06-24 14:27:50 · 162 阅读 · 1 评论 -
JVM笔记九-GC收集器日志信息学习
在上一篇文章中,我们通过代码运行结果,查看到JVM的堆内存逻辑上分区是三部分,物理上分区是2部分,以及是新生代分区三部分,占比分布是8/1/1。而且我们还通过代码和堆JVM参数配置,制造出了OOM异常。下面我们就来分析GC回收器的日志信息。先来看看,OOM后,GC详细日志信息:新生区的伊甸园区GC日志分析新生区的Eden区的GC,叫法:GC或者是YGC或者是MinorGC或者是轻GC我们复制一条来分析:[GC (Allocation Failure①) [PSY...原创 2020-11-21 10:11:15 · 118 阅读 · 0 评论 -
JVM笔记八-堆参数调优
JVM垃圾收集器(Java Garbage Collection)。本教程均在JDK1.8+HotSpot为例来讲解的.先来看看Java7的:编辑再来看看Jva8的编辑从上图中我们可以看出,java8之后换成了元空间。那么怎么证明,堆区是有新生代、永久代、元空间三部分组成的呢?OOM这个错误我们都熟悉,那么怎么手动制造出一个OOM呢?如果16G的物理内存,JVM堆内存能够分到多少G的内存空间呢?我们带着这些疑问来一起学习吧在Java8中,永久带已经被移..原创 2020-11-15 10:07:06 · 112 阅读 · 0 评论 -
JVM笔记六-堆区知识之对象生命周期和GC的关系
通过上一篇文章的学习,我们对JVM堆区有了初步的认识,接下来,我们继续展开讲解堆区。对象生命周期和GC的关系。我们已经知道了,堆区的新生区分成了三个部分:伊甸园区、幸存者0区、幸存者1区。其中0区也叫from,1区也叫to区。但是这个from和to是固定不变的吗?NO,NO,NO不是的。当新生区执行一次GC(YGC)后,from和to区会进行交换。交换后,也就是在GC之后,谁空谁是to区。所以,from区和to区的位置和名分不是一成不变的。会发生变化的。Java堆从GC的角度可以分为:新生区原创 2020-10-24 10:02:34 · 165 阅读 · 0 评论 -
JVM笔记五-堆区
JVM笔记五-堆区在JVM中,堆区是重中之重。通过前面文章的学习,我们知道了,栈区是不会有垃圾回收的,所以,经常说的垃圾回收,其实就是回收的是堆区的数据。在这里,我们将会看到传说中的,新生代、老年代、永久代(元空间)。凯哥Java(kaigejava)欢迎大家一起学习。堆(Heap):一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三个部分:堆内存分区:Young原创 2020-10-11 10:07:13 · 157 阅读 · 0 评论 -
JVM学习笔记之栈区
JVM学习笔记之栈区本文主要内容:栈是什么?栈帧又是什么?在JVM中,main方法调用say方法后,是怎么运行的?本文将详细讲解栈。希望大家学了之后,对栈有更深的了解。心法:在JVM中,栈管运行,堆管存储。栈数据结构特点:先进后出。生活中常见的case就是弹夹。最后一个压进弹夹的子弹,最先出弹夹。Stack栈:栈也叫栈内存,主管Java程序的运行,是在线程创建时创建,它的生命周期跟随线程的生命周期,线程结束,栈内存也就被释放了。对于栈来说,不存在垃圾回收问题,只要是线程一结束,该栈就o原创 2020-09-20 11:05:17 · 231 阅读 · 0 评论 -
JVM笔记二双亲委派机制
JVM笔记二双亲委派机制JVM双亲委派机制,简单来说:我爸是李刚,有事找我爸。用三个字来说:往上捅。不信?咱们一起看看。JVM的双亲委派机制JVM类加载器是什么机制?为什么使用这种机制(这种机制的好处是什么)?说下类加载流程?用代码验证类加载机制。为什么要破坏类的这种加载机制?如果从JVM角度来讲的话,类的加载器只有两种:启动类加载器。这个类是C++写的,是JVM虚拟机自身的一部分;另一种就是所有其他类的类加载器了。是Java写的, 独立于虚拟机外部的,而且都是继承于:jav...原创 2020-08-08 10:12:00 · 162 阅读 · 0 评论 -
JVM学习笔记之类装载器-ClassLoader
JVM学习笔记之类装载器-ClassLoader本文字数:2300,阅读耗时7分钟JVM体系结构概览类装载器ClassLoader:负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于class文件是否可以允许,则由Execution Engine决定。本文是由凯哥Java(WXID:kaigejava)分享《JVM系列教程》.原创 2020-08-06 15:36:53 · 151 阅读 · 0 评论