9 小小工匠

尚未进行身份认证

我要认证

show me the code ,change the world

等级
TA的排名 90

JVM - Class常量池 || 运行时常量池

文章目录Preclass常量池字面量符号引用符号引用PreJVM - 深入剖析字符串常量池JVM - 基本类型的包装类和对象池class常量池Class常量池我们可以理解为是Class文件中的资源仓库。Class文件中主要由两大部分 类的版本、字段、方法、接口等描述信息外,常量池(constant pool table),用于存放编译期生成的各种字面量(Literal)和符号引用(Symbolic References)。我们来看下我们天天打交道的class文件十六进制的样子 大

2020-07-13 00:40:27

JVM - 一个案例反推不同JDK版本的intern机制以及intern C++源码解析

文章目录Pre案例JDK1.7(含)+JDK1.6PreJVM - 深入剖析字符串常量池案例 String str2 = new StringBuilder("计算机").append("技术").toString(); System.out.println(str2 == str2.intern()); String s2 = new StringBuilder("计算机技术").toString(); System.out.println(s

2020-07-12 00:32:24

JVM - 基本类型的包装类和对象池

文章目录Pre八大基本类型DemoPreJVM - 深入剖析字符串常量池学习了String 字符串常量池。接下来我们也顺便看下基本类型的包装类和起对应的对象池JDK1.8八大基本类型Java基本类型共有八种,基本类型可以分为三类,字符类型char布尔类型boolean数值类型byte、short、int、long、float、doublejava中基本类型的包装类的大部分都实现了常量池技术(严格来说应该叫对象池,在堆上),这些类是Byte,Short,Integer,Long

2020-07-11 23:07:17

JVM - 深入剖析字符串常量池

文章目录字符串常量池位置的变更class文件常量池Class常量池字符串常量池位置的变更Jdk1.6及之前: JVM存在永久代, 运行时常量池在永久代,运行时常量池包含字符串常量池Jdk1.7:有永久代,但已经逐步“去永久代”,字符串常量池从永久代里的运行时常量池分离到堆里Jdk1.8及之后: 无永久代,变成了元空间,运行时常量池在元空间,字符串常量池里依然在堆里class文件常量池Class常量池...

2020-07-08 15:44:22

Java - String源码解析及常见面试问题

文章目录PreQ1: String 是如何实现的?它有哪些重要的方法?PreJava Version : 主流版本JDK 8Q1: String 是如何实现的?它有哪些重要的方法?看到了吧 , 底层存储是 char 数组public final class String implements java.io.Serializable, Comparable<String>, CharSequence { // the value is used for charact

2020-07-07 20:20:35

JVM - 要上线了,JVM参数还没正儿八经的估算过咋办?

文章目录PrejstatPre如题, 一顿操作猛如虎,业务系统总算快发布了,可是JVM的参数还是当初随意设置的那么几个参数, 咋弄? 系统的流量预估(均值、峰值)导致一系列的评估: 每秒的对象生成大小,新生代 老年代的比例是否合理, 动态年龄判断机制、老年代担保机制会不会被频繁触发,full gc 的频率。。。。留下一脸懵逼的你在风中瑟瑟发抖~不要怕 ,今天我们就来看一下如何通过合理的预估来设置系统的JVM参数JVM-10虚拟机性能监控与故障处理工具之【JDK的命令行】名称英文全

2020-07-06 23:57:43

JVM - 列出JVM默认参数及运行时生效参数

文章目录Pre-XX:+PrintFlagsInitial 列出JVM参数的默认值-XX:+PrintFlagsFinal 列出运行程序时生效的值-XX:+PrintCommandLineFlags 列出被用户或者JVM优化设置过的详细的XX参数的名称和值列举附加隐藏参数Pre有的时候,想看下自己没有设置的JVM参数的值, 或者有的时候想看下JVM某个参数的默认值 ,亦或想看下用户或者JVM修改的JVM参数 ?咋办 ?JVM在1.6.0_14以后提供了几个参数可以打印出来所有XX参数和对应的值

2020-07-06 16:07:30

JVM - 解读GC中的 Safe Point & Safe Region

文章目录Safe Point 安全点Safe Region 安全区域OopMapSafe Point 安全点思考: 如上图 GC的时候,是不是可以马上GC,而不用去care用户线程 ?答案肯定是不行的。 HotSpot中GC不是在任意位置都可以进入,而只能在safepoint处进入。JVM在设计的时候在“特定位置”记录了OopMap , 而这些位置被称为安全点。Safe Region 安全区域OopMapGC 我们都知道是清理那些引用不可达的对象, 简单来说 JVM怎样才能够判断出所有位

2020-07-04 08:18:51

JVM - ZGC初探

文章目录PreZGC概述ZGC的目标参考资料PreJVM - G1初探ZGC概述ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器,ZGC源自于是Azul System公司开发的C4(Concurrent Continuously Compacting Collector) 收集器。目前很少有公司使用,可适当了解,扩展知识面。ZGC的目标参考资料https://wiki.openjdk.java.net/display/zgc/Mainhttp://cr.op

2020-07-01 16:43:14

JVM - G1初探

文章目录GC概述参考GC概述我们知道Serial 、Serial Old 、 Parallel 、 Parallel Old 、 ParNew 、CMS这些垃圾收集器都是基于分代收集理论,即将内存区域按照存储对象的不同分为年轻带、老年代和元空间。如下G1 和 ZGC 逐渐淡化了这种分代的概念,G1的堆内存分配如下堆被划分为一组大小相等的堆区域,每个堆区域都有一个连续的虚拟内存范围。 这在内存使用方面提供了更大的灵活性。参考https://www.oracle.com/technetwo

2020-07-01 06:51:56

JVM - CMS深度剖析

文章目录PreCMSJVM参数阶段PreJVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】JVM-06垃圾收集Garbage Collection(下)【垃圾收集器】JVM - 再聊GC垃圾收集算法及垃圾收集器CMSConcurrent Mark Sweep 并发标记清除 。CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用,它是

2020-06-30 00:14:18

JVM - 再聊GC垃圾收集算法及垃圾收集器

文章目录Pre分代收集理论常见的垃圾收集算法标记PreJVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】JVM-06垃圾收集Garbage Collection(下)【垃圾收集器】分代收集理论当前虚拟机的垃圾收集都采用分代收集算法 , 意思就是根据对象存活周期的不同将 java堆分为新生代和老年代,这样就可以根据各个年代的特点选择合适的垃圾收集算法。举个例子,新生代中,大部分对象都是

2020-06-29 22:21:09

JVM-彻底搞懂 逃逸分析&标量替换

文章目录Pre对象分配流程总览逃逸分析所处的阶段示例说明逃逸分析的含义逃逸分析的对象分配的方式【标量替换】标量 VS 聚合量JVM 参数 -XX:+DoEscapeAnalysis栈上分配DemoPreJVM-剖析对象内存分配流程对象分配流程总览逃逸分析所处的阶段通过上图的对象分配流程,我们可以知道逃逸分析是发生在第一步判断对象是否可以在栈上分配的时候, 在栈上分配的目的是为了减少将对象分配到堆上的概率,节约堆内存,减少GC压力。逃逸分析是JVM为了优化对象分配而做的一种优化措施。

2020-06-27 11:22:17

JVM-剖析对象内存分配流程

文章目录对象分配流程总览流程分解栈上分配对象 (逃逸分析)对象分配流程总览流程分解栈上分配对象 (逃逸分析)众所周知, JAVA中的对象都是在堆上进行分配,当对象没有被引用的时候,需要GC。如果对象数量较多的时候, GC 压力较大,也间接影响了应用的性能 。为了减少临时对象在堆内分配的数量,JVM通过逃逸分析确定该对象不会被外部访问 . 如果不会逃逸可以将该对象在栈上分配内存,这样该对象所占用的内存空间就可以随栈帧出栈而销毁,从而减轻GC的压力。...

2020-06-27 00:19:49

JVM - 剖析Java对象头Object Header之指针压缩

文章目录Pre指针压缩【指针压缩】开启 VS 关闭PreJVM - 剖析Java对象头Object Header之对象大小mark word : 32位 占4字节 ,64位 占 8字节klass point : 开启压缩占4字节,未开启 占 8字节。指针压缩jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩启用指针压缩-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOopsoop(ordin

2020-06-25 23:58:20

JVM - 剖析Java对象头Object Header之对象大小

文章目录Pre总览PreJVM - 写了这么多年代码,你知不道new对象背后的逻辑? 中大体介绍了Java中 new 对象背后的主要流程,其中对象头的部分,我们仅仅是点到为止,这里我们深入剖一下Object Header的奥秘 。总览初始化默认值以后,JVM要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。这些信息存放在对象的对象头Object Header之中。 这部分数据的长度在32位和64位的虚拟机中分别为32个和64

2020-06-25 16:10:32

JVM - 写了这么多年代码,你还不知道new对象背后的逻辑?

文章目录对象创建流程1.类加载检查2.分配内存3.初始化4.设置对象头5.执行方法对象创建流程1.类加载检查2.分配内存3.初始化4.设置对象头5.执行方法

2020-06-24 21:44:33

JVM - 应用JVM核心参数推荐设置

文章目录PreJDK版本核心参数堆线程栈方法区(元空间)案例PreJVM-08垃圾收集Garbage Collection【GC常用参数】JDK版本= 1.8核心参数‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M 堆线程栈默认1M , 不足的话 StackOverflowError-Xss设置越小 ,说明一个线程栈里能分配的栈帧就越少,但是

2020-06-22 11:17:14

JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系

文章目录Pre示例demo总体关系代码示例论证反汇编PreJVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器中我们探讨了线程栈中的内部结构 ,大家有么有想过main方法呢? 我们继续来看下main方法示例demopackage com.gof.test;public class Artisan { public static int FIVE = 5 ; // 静态变量 public static User user = new U

2020-06-22 00:47:28

JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器

文章目录Pre运行时数据区总览PreJVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】JVM-02内存区域与内存溢出异常(中)【hotspot虚拟机对象】JVM-03内存区域与内存溢出异常(下)【OutOfMemoryError案例】运行时数据区总览字节码文件被装载子系统装载到JVM中,字节码执行引擎负责执行这些字节码文件。装载子系统和执行引擎都是C++的实现。我们重点关注下装载子系统: JVM-白话聊一聊JVM类加载和双亲委派机制源码解析...

2020-06-21 12:15:09

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到王者
    签到王者
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 推荐红人
    推荐红人
    发布高质量Blink获得高赞和评论,进入推荐栏目即可获得
  • 精彩红人
    精彩红人
    发布高质量Blink获得高赞和评论,进入精彩栏目即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 博客之星-入围
    博客之星-入围
    授予每年博客之星评选结果第21-200名的用户
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 分享达人
    分享达人
    成功上传6个资源即可获取