
jvm
文章平均质量分 89
BLF2
这个作者很懒,什么都没留下…
展开
-
JVM学习之垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enum、泛型API层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池等。转载 2024-01-15 23:54:34 · 578 阅读 · 1 评论 -
JVM学习之垃圾回收相关概念
1、一般的垃圾回收算法至少会划分出两个年代,年轻代和老年代。但是单纯的分代理论在垃圾回收的时候存在一个巨大的缺陷:为了找到年轻代中的存活对象,却不得不遍历整个老年代,反过来也是一样的。2、如果我们从年轻代开始遍历,那么可以断定N, S, P, Q都是存活对象。但是,V却不会被认为是存活对象,其占据的内存会被回收了。这就是一个惊天的大漏洞!因为U本身是老年代对象,而且有外部引用指向它,也就是说U是存活对象,而U指向了V,也就是说V也应该是存活对象才是!而这都是因为我们只遍历年轻代对象!转载 2024-01-15 23:53:24 · 122 阅读 · 0 评论 -
JVM学习之垃圾回收概述和相关算法
垃圾回收概述Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。转载 2024-01-15 23:51:40 · 113 阅读 · 0 评论 -
JVM学习之字符串常量池
在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串内容相等的字符串,则返回池中的字符串地址。如果不是用双引号声明的String对象,可以使用String提供的intern方法:intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。2、使用 intern() 方法:由于数组中字符串的引用都指向字符串常量池中的字符串,所以程序需要维护的 String 对象更少,内存占用也更低。常量池就类似一个Java系统级别提供的缓存。转载 2024-01-15 23:49:54 · 152 阅读 · 0 评论 -
JVM学习之执行引擎
执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部。转载 2024-01-15 23:47:03 · 143 阅读 · 0 评论 -
JVM学习之对象的实例化内存布局与访问定位
因此一般来说(由字节码中跟随invokespecial指令所决定),new指令之后会接着就是执行init方法,把对象按照程序员的意愿进行初始化,这样一个真正可用的对象才算完成创建出来。将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存储在对象的对象头中。在Java程序的视角看来,初始化才正式开始。初始化成员变量,执行实例化代码块,调用类的构造方法,并把堆内对象的首地址赋值给引用变量。所有属性设置默认值,保证对象实例字段在不赋值可以直接使用。转载 2024-01-15 23:45:41 · 72 阅读 · 0 评论 -
JVM学习之方法区
原文链接:https://github.com/youthlql/JavaYouth方法区栈、堆、方法区的交互关系从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。栈、堆、方法区的交互关系下面涉及了对象的访问定位Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中转载 2024-01-15 23:44:10 · 148 阅读 · 0 评论 -
JVM学习之堆
从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。多线程同时分配内存时,使用TLAB可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为快速分配策略。据我所知所有OpenJDK衍生出来的JVM都提供了TLAB的设计。1、每个线程都有一个TLAB空间2、当一个线程的TLAB存满时,可以使用公共区域(蓝色)的。转载 2024-01-15 23:42:37 · 237 阅读 · 0 评论 -
JVM学习之虚拟机栈
具体问题具体分析如果只有一个线程才可以操作此数据,则必是线程安全的。如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。如果对象是在内部产生,并在内部消亡,没有返回到外部,那么它就是线程安全的,反之则是线程不安全的。/*** 面试题:* 方法中定义的局部变量是否线程安全?具体情况具体分析* 何为线程安全?* 如果只有一个线程才可以操作此数据,则必是线程安全的。* 如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题。转载 2024-01-15 23:40:33 · 225 阅读 · 0 评论 -
JVM学习之运行时数据区
JVM的PC寄存器是对物理PC寄存器的抽象模拟,是软件层面的概念,主要存储指令相关的现场信息。CPU只有把数据加载到寄存器才能使用。PC寄存器是用来存储指向下一条指令的地址,也可以理解为即将要执行指令的代码。由执行引擎读取下一条指令。它是一块很小的内存空间,小到可以忽略不计,也是运行速度最快的存储区域。在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程一致。任何时间,一个线程只有一个方法在执行,也就是所谓的当前方法。原创 2023-12-16 23:17:08 · 284 阅读 · 0 评论 -
JVM学习之类加载子系统
引导类加载器(Bootstrap Classloader)和自定义类加载器(User-Defined ClassLoader)从概念上来讲,自定义类加载器一般是指程序中由开发人员自定义的一类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个:注意:上面的ClassLoader是类似等级关系,不是继承关系。不是Java语言实现的。//获取系统类加载器。原创 2023-12-16 23:13:08 · 207 阅读 · 0 评论 -
JVM学习之JVM概述
Java虚拟机的启动是通过引导类加载器(Bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。在今天,Java程序的运行性能已经达到了可以和C/C++程序一较高下的地步。Hotspot VM是目前市面上高性能虚拟机代表作之一。Java编译器输入的指令流基本上是一种基于。HotSpot只使用的PC寄存器,所以是。它采用解释器与即时编译器并存的架构。JVM整体结构详细图。原创 2023-12-16 23:10:06 · 302 阅读 · 0 评论 -
记一次服务CPU过高排查
查看到CPU过高,于是根据CPU线程占用排查问题原创 2022-09-30 16:38:22 · 1731 阅读 · 0 评论 -
记一次生产环境内存占用过高的排查
生产环境出现内存使用较大的情况,没有OOM,但K8s服务重启了,查一下原因原创 2022-08-26 14:00:10 · 948 阅读 · 0 评论 -
一头扎进caffeine cache的大坑
一头扎进caffeine cache的大坑caffeine号称性能做好的本地cache,最近手头有个小项目,想用caffeine作为本地缓存缓存一下用户的token,然后配置大概如下: private static final Cache<String, String> userTokenCache = Caffeine.newBuilder() // 数量上限 .maximumSize(10000) // 过期机制原创 2021-02-03 12:57:02 · 4513 阅读 · 0 评论 -
jvisualvm定位JVM内存溢出,死锁,分析GC日志
OOM定位创造一个会OutOfMemoryError的程序import java.util.LinkedList;import java.util.List;public class OutOfMemoryDump { /** * JVM 参数 * -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOu...原创 2020-01-01 14:52:11 · 2102 阅读 · 0 评论