JVM
文章平均质量分 93
主要是分模块进行java的JVM的讲解
shengjk1
零基础转码,头部大厂程序员,努力构建 通俗易懂的、好玩的编程语言教程。关注我,习得转码经验!翱翔在编程的海洋里!只学习最值得学的内容!
展开
-
JVM1.8分代的理论基础和简单测试
本文介绍了JVM的分代机制,即将内存分为年轻代和老年代,利用内存池保存不同年龄的对象,每当某一代充满时,会触发垃圾收集操作。大多数对象被分配到年轻代,其中绝大多数对象最终在这一代消亡。当年轻代达到容量时,会触发垃圾收集,只针对年轻代进行垃圾回收;而其他代中的垃圾暂不处理。在每次次要收集时,一部分幸存对象会被移至永久代。永久代最终也会填满,需要对整个堆进行回收,持续的时间通常年轻代长,因为牵扯的对象数量更多。原创 2024-05-21 20:23:54 · 844 阅读 · 0 评论 -
java1.8 的 client runtime compiler和server runtime compiler
本文介绍了Java Runtime Compiler的两种模式:Client Runtime Compiler和Server Runtime Compiler,以及如何在Java中使用它们。此外,还介绍了Java垃圾回收、堆以及runtime compiler的默认值。原创 2024-05-11 10:24:00 · 358 阅读 · 0 评论 -
一文搞懂JVM类加载过程
前言我们知道一个 java 类想要被执行就必须被加载到内存中,而加载的过程呢有大体可以分为 加载、连接、初始化、使用、卸载,五部分,下面,我们就一起看一下各个部分 JVM 都做了什么。首先,我们将这段代码编程成 class 文件,然后运行。/** * Created by shengjk1 on 2020/8/30. */public class Test { public static int b=7; public static void main(String[] args) {原创 2020-09-28 19:51:31 · 291 阅读 · 2 评论 -
JMM 知识点总结
java 内存模型总结,主要方便查看JMM屏蔽各种硬件和操作系统内存方法差异,以实现让 Java 程序在各个平台下都能达到一致的内存方法效果。主要的目的:定义程序中各种变量的访问规则( 关注在虚拟机中变量存取与内存交互的底层细节 )包括:实例字段、静态字段和构成数组的对象元素,不包括局部变量与方法参数除了增加高速缓存外,为了使处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行乱序执行优化,处理器会在计算之后将乱序执行的结果进行重组,保证该结果与顺序执行的结果一致。但并不保证程序中原创 2020-09-23 14:54:40 · 416 阅读 · 0 评论 -
一文搞懂 java -jar 发生了什么
之前一直就很好奇 java -jar 到底发生了什么,为什么执行 java -jar 代码就自动运行了。今天我们来说明一下,尽量覆盖操作系统、编译原理、JVM 的一些东西。( 本文将处于一个不断更新的状态,知道上面这些东西覆盖的差不多了为止,如果可以的话,也会加上硬件方面的东西 ),主要的目的就是为了能以最简单的 java 代码来串一些相对来说比较底层的东西,让自己以及让每个读者对计算机能有一个相对全局的了解。我们先约定如下:1.操作系统仅仅指的是unix 或类unix2. 64 位机器3. 64位原创 2020-09-17 15:26:22 · 2009 阅读 · 5 评论 -
此专题文章参考于《深入理解Java虚拟机》
qq原创 2018-07-08 13:51:15 · 249 阅读 · 0 评论 -
Java内存分配分析
Java内存分配分析本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的转载 2017-01-17 15:58:14 · 278 阅读 · 0 评论 -
java对象的强引用,软引用,弱引用和虚引用
众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一转载 2017-01-17 16:27:53 · 272 阅读 · 0 评论 -
内存管理和垃圾回收
JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: JVM内存回收 Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对象分为年青代(Young)、年老代(Tenured)、持久代(Perm),对不同生命周期的对象使用不同的算法。(基于对对象生命周期分析) 1.Young(年轻代)年轻代分三个区。一个Eden区,两个Surviv转载 2017-02-06 13:53:42 · 382 阅读 · 0 评论 -
JVM内存模型
先磨磨肩擦擦掌,小二很早就听说jvm的内存很是奇特,今日一看果然不同凡响。下面且听小二一一道来。一、.jvm可以看做是对操作系统的模拟,看过《操作系统》或者《深入理解操作系统》这本书的人都知道(虽然我没有看完),操作系统博大精深,jvm想要很好的模拟出操作系统实属不易 二、一次编译到处运行,虽然现在看来很普通,但在当时可谓是创时代之举。当时的设计者既然都考虑到让jvm仅仅作为一个平台,支持更多的语原创 2017-08-22 22:14:45 · 332 阅读 · 0 评论 -
JVM内存模型之栈
2.栈 线程私有 HotSpot将java虚拟机栈与本地方法栈合并成一个了(操作系统中的栈是通过硬件ESP、EBP寄存器来实现的)。虚拟机的栈在细分,分为: 当前栈帧、局部变量表、操作栈、动态链接、返回地址等 至于其原理:怎么样调用下一个方法怎么样返回地址等跟操作系统是一样的,就不细说了。简单的说一下像局部变量表这些东西是干啥的。 局部变量表:方法调用时传递的参数的索引、引用都放在原创 2017-08-22 22:16:45 · 651 阅读 · 0 评论 -
JVM内存模型之方法区
方法区 又称非堆区(Non-Heap)属于 线程共有内容 主要用来存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。JDK8之前又被称为永久带 (Permanent Generation),JDK8永久带已被元空间 (MetaSpace)替代,虽然JDK1.7仍然保留永久带,但存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。譬如符号原创 2017-08-23 22:01:18 · 831 阅读 · 0 评论 -
JVM内存模型之堆
堆 属于 线程共有的内容 作为我们程序员最关系的部分:堆,也是占用JVM内存最大的一块。主要用来存放对象实例、数组等,也是GC发生最多的地方。java堆可以处在物理上不连续的内存空间,只要逻辑上是连续的即可。 具体来说堆分为2大部分:年轻代、年老代。而年轻代又分为:Eden空间、From Survivor空间、To Survivor空间 错误及样例 没错常见的错误就是java.lang.原创 2017-08-27 16:00:31 · 878 阅读 · 2 评论 -
JVM内存模型之直接内存
直接内存 又称堆外内存,也就是说这不是jvm运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域,但这部分也会被频繁的使用,而且也可能导致OOM。堆外内存有什么优点呢? 1 减少了垃圾回收的工作,因为垃圾回收会暂停其他的工作 2 可以提高性能,避免java堆和native堆(直接内存)来回复制数据。 使用场景 1.在JDK1.4之后加入了NIO,引入了一种基于通道与缓冲区的I/O原创 2017-08-27 18:23:04 · 1080 阅读 · 0 评论 -
JVM之垃圾收集器
前言: 前面已经讨论过jvm内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生随着线程而灭,而java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,另外我们只有在程序处于运行期间才知道要创建什么对象以及这些对象分配多少内存。如何判断对象已死: 通过可达性分析,如果GC Roots到对象是不可达的,表示这原创 2017-10-07 17:23:14 · 258 阅读 · 0 评论 -
JVM内存模型之运行时常量池
运行时常量池 jdk7之前属于方法区的一部分,jdk8之后属于Metaspace,在heap中。 运行时常量池俗称常量池,主要用于存放编译期生成的各种字面常量以及符号引用,这部分的内容将在类加载后进入常量池中存放。 java语言并不要求常量一定只有编译期才能产生,也就是并非预置入class文件中的常量池的内容才能进入运行时常量池,运行期间也可能将新的常量放入池中其他: 待看完编译原理后再详细原创 2017-10-08 12:06:26 · 528 阅读 · 0 评论