
java虚拟机
文章平均质量分 82
csdn_life18
这个作者很懒,什么都没留下…
展开
-
Spring Boot 项目中的 GC Root
Autowired@Service@Autowired@MapperSpring上下文管理的控制器、服务和MapperServlet容器中的长生命周期对象数据库连接池中的连接对象活动线程这些组件和对象由于它们在应用程序中的关键角色,会被GC Root引用,从而不会被垃圾回收。理解这些GC Root的来源,对于调试和优化Spring Boot应用程序的内存使用非常重要。原创 2024-06-15 19:20:09 · 999 阅读 · 0 评论 -
过两年 JVM 可能就要被 GraalVM 替代了
虽然我们还没有看到有哪个公司说在用 GraalVM 了,但是QuarkusSpring等很多的框架都已经支持 GraalVM 的 Native-image 模式,而且在 Orcale 的大力推广下,相信不久之后就会出现在更多的产品中。赶紧体验一下吧。过两年 JVM 可能就要被 GraalVM 替代了)转载 2024-06-14 12:03:23 · 605 阅读 · 0 评论 -
MinorGC、MajorGC、FullGC差异
GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。转载 2024-06-13 11:04:10 · 413 阅读 · 0 评论 -
线程TLAB局部缓存区域(Thread Local Allocation Buffer)
2、Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer), 其大小由JVM根据运行的情况计算而得,在TLAB上分配对象时不需要加锁,因此JVM在给线程的对象分配内存时会尽量的在TLAB上分配。1、堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的。4、所有新创建的Object 都将会存储在新生代Yong Generation中。转载 2024-06-12 15:31:59 · 114 阅读 · 0 评论 -
Java内存泄漏分析和解决
内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC(转载 2024-06-12 10:56:33 · 194 阅读 · 0 评论 -
Java 虚拟机(JVM)之基本概念
8、PC寄存器:每个线程私有的空间,Java虚拟机会为每个线程创建PC寄存器,在任意时刻,一个Java线程总是在执行一个方法,这个方法被称为当前方法,如果当前方法不是本地方法,PC寄存器就会执行当前正在被执行的指令,如果是本地方法,则PC寄存器值为undefined,寄存器存放如当前执行环境指针、程序计数器、操作栈指针、计算的变量指针等信息。3、Java堆:在java虚拟机启动的时候建立Java堆,它是java程序最主要的内存工作区域,几乎所有的对象实例都存放到Java堆中,堆空间是所有线程共享的。转载 2024-06-11 10:31:12 · 72 阅读 · 0 评论 -
Java 浅拷贝和深拷贝
开发过程中,有时会遇到把现有的一个对象的所有成员属性拷贝给另一个对象的需求。比如说对象 A 和对象 B,二者都是 ClassC 的对象,具有成员变量 a 和 b,现在对对象 A 进行拷贝赋值给 B,也就是 B.a = A.a;B.b = A.b;这时再去改变 B 的属性 a 或者 b 时,可能会遇到问题:假设 a 是基础数据类型,b 是引用类型。当改变 B.a 的值时,没有问题;转载 2024-06-11 09:05:02 · 94 阅读 · 0 评论 -
as-if-serial规则和happens-before规则的区别
happens-before的概念最初由Leslie Lamport在其一篇影响深远的论文(《Time,Clocks and the Ordering of Events in a Distributed System》)中提出,有兴趣的可以google一下。JSR-133使用happens-before的概念来指定两个操作之间的执行顺序。由于这两个操作可以在一个线程之内,也可以是在不同线程之间。转载 2024-06-05 21:45:37 · 60 阅读 · 0 评论 -
JAVA 编程语言 JDK 8 默认用的是哪款 GC 垃圾收集器
因为 JDK8 还是市场占有率最高的,所以针对这个版本我做了深入的探索。已经很成熟了,所以直接替换了旧的收集器,所以 JDK 7u4 以后的 7 和 JDK 8 老年代默认使用的都是。好的那么接下来开启 GC 之旅,这个"别名"一样没办法了,我直接打印一下 GC 的日志,看下日志里面显示什么,这个参数就上场了,他可以输出 GC 详细的分区分析,我们再次运行刚才的两个例子如下。按照书中或者是网上的文章发现,设置这个参数以后默认就是如下两个组合,新生代用。,可以直接使用如下命令验证,我用的不是。转载 2023-03-06 11:45:04 · 1555 阅读 · 0 评论 -
方法区(Method Area)详解
方法区可以看作是独立于Java堆的一部分,并且也是和堆一样是整个JVM实例共用一份。转载 2023-02-22 12:27:50 · 691 阅读 · 0 评论 -
JVM内存:年轻代、老年代、永久代
参考文章:1.Java 新生代、老年代、持久代、元空间2.Java内存与垃圾回收调优3.方法区的Class信息,又称为永久代,是否属于Java堆?Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示:在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old)。新生代 ( Young ) 又被划分为三个区域:Eden、S0、S1。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及...转载 2021-01-05 14:54:08 · 1181 阅读 · 0 评论 -
浅谈双亲委派模型
本文浅析了双亲委派的基本概念、实现原理、和自定义类加载器的正确姿势。对于更细致的加载loading过程、初始化initialization顺序等问题,文中暂不涉及,后面整理笔记时有相应的文章。JDK版本:oracle java 1.8.0_102基本概念定义双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。 每一转载 2020-07-18 20:55:41 · 218 阅读 · 0 评论 -
Java静态绑定与动态绑定
文章目录程序绑定的概念静态绑定动态绑定java的编译与运行程序绑定的概念绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.静态绑定在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现。例如:C。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定动态绑定转载 2020-07-17 13:47:22 · 559 阅读 · 0 评论 -
java类的加载机制
文章目录1、什么是类的加载加载.class文件的方式2、类的生命周期加载连接验证:确保被加载的类的正确性准备:为类的 静态变量分配内存,并将其初始化为默认值解析:把类中的符号引用转换为直接引用初始化结束生命周期3、类加载器JVM类加载机制4、类的加载Class.forName()和ClassLoader.loadClass()区别5、双亲委派模型双亲委派机制:ClassLoader源码分析:双亲委派模型意义:6、自定义类加载器1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存转载 2020-07-15 21:29:16 · 536 阅读 · 0 评论 -
jvm中的新生代Eden和survivor区
聊聊JVM的年轻代1.为什么会有年轻代2.年轻代中的GC3.一个对象的这一辈子4.有关年轻代的JVM参数1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空转载 2020-07-15 13:04:53 · 802 阅读 · 0 评论 -
JVM虚拟机种类
JVM虚拟机种类1.Sun Classic VM2.Exact VM3.HotSpot VM4.KVM(Kilobyte)5.JRockit6.J97.Azul VM8.Liquid VM9.Dalvik VM10.Microsoft JVM1.Sun Classic VM1.现在此款虚拟机已经淘汰了,是第一款商用的虚拟机。2.只能使用纯解释器的方式来执行Java代码。2.Exact VM1.Exact Memory Management准确式内存管理2.编译器和解释器混合工作以及两级即时转载 2020-07-14 19:02:08 · 879 阅读 · 0 评论 -
面试官,Java8中JVM内存结构变了,永久代到元空间
在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试者,如果知晓这些变化,又将成为面试中的亮点。如果在网络上搜索JVM内存结构,90%的可能会搜到Java7及以前的内存图,本篇文章将会对JVM内存结构再次细化,深入理解Java8之后的内部变化。现在意识到关注公众号“程序新视界”的好处了吧。在这里可以不断的刷新你的知识和认知。转载 2020-07-14 18:25:48 · 565 阅读 · 0 评论 -
FinalReference类的功能
FinalReference类的功能、jvm中finalize()方法的实现方式、为什么实现finalize()方法的类要至少经过两次gc才能回收。FinalReference 的子类是Finalizer,FinalReference 类的权限是default的,Finalizer 类的权限是default的,并且有final修饰符,这两个类原则上不让开发者使用。他们和jvm配合实现java中对象实例被gc回收之前执行finalize()方法。java中的类有构造方法,不像C++中有析构函数,finali转载 2020-07-14 15:01:18 · 241 阅读 · 0 评论 -
Java基础篇 - 强引用、弱引用、软引用和虚引用
目录前言正文(一) 强引用(StrongReference)前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到转载 2020-07-14 13:11:17 · 301 阅读 · 0 评论 -
java对象的访问方式句柄和直接指针介绍
建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的 具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定 义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是 取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。 如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中 存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信转载 2020-07-12 17:32:24 · 2409 阅读 · 0 评论 -
Java中的“对象监视器Monitor“和“对象锁“
在JVM的规范中,有这么一些话: “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的” “为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁” “锁住了一个对象,就是获得对象相关联的监视器”监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,进入这个建筑叫做"进入监视器",进入建筑中的那个特别的房间叫做"获得监视器",占据房间叫做"持有监视器",离开房间叫做"释放监视器",离开建筑叫做"退出监视...转载 2020-07-01 15:55:41 · 879 阅读 · 0 评论 -
JAVA基础:谈谈Java语言的垃圾收集器
来源:考试大【考试大:教育考试门户】2006年9月29日垃圾收集器是Java语言区别于其他程序设计语言的一大特色。它把程序员从手工回收内存空间的繁重工作中解脱了出来。在SUN公司的Java程序员(Java Programmer)认证考试中,垃圾收集器是必考的内容,一般多可以占总分值的6%左右。但是由于SUN公司的Java Programming Language SL-275 课程的标准教材中,对有关垃圾收集器的内容只做了非常简单的介绍,而另外的一些关于Java技术的书籍,比如《Java 2...转载 2020-07-13 15:29:01 · 301 阅读 · 1 评论