
JDK以及JVM深度剖析和调优
文章平均质量分 91
逐步理解JVM类加载机制,内存模型剖析,垃圾回收器,JVM调优。
阿立聊全栈
浙江大学,10年上市公司Java高级讲师,基础扎实;Java办公文章优质创作者;优快云认证博客专家;Java编程领域有着丰富的经验和技能,熟练掌握前后端技术,全栈。
展开
-
Tomcat类加载机制详解
Java中有 3 个类加载器,另外你也可以自定义类加载器。原创 2024-08-22 22:57:28 · 1448 阅读 · 0 评论 -
GraalVM与SpringBoot
spring 6.0和spring boot3.0都会基于jdk17构建,spring官方也写的很清晰,会继续维护和升级spring 2.的版本,如果有人不愿意升级,一样可以使用老的版本。比如阿里开源的jdk8,11,就有非侵入式携程,在高并发项目中性能比jdk17要强。而云原生的虚拟机则应该是Oracle公司主导,因为国外开发者,大多不会强制限定一定是Java语言,喜欢多语言开发,所以应该来说比较受欢迎,而国内则不同。所以到底是Oracle公司在引导Java了,还是有可能国内的公司引导了,这个都不好说!原创 2024-08-19 15:43:55 · 425 阅读 · 0 评论 -
让Java性能提升的JIT深度剖析
跨语言(语言无关性):JVM只识别字节码,所以JVM其实跟语言是解耦的,也就是没有直接关联,JVM运行不是翻译Java文件,而是识别class文件,这个一般称之为字节码。还有像Groovy 、Kotlin、Scala等等语言,它们其实也是编译成字节码,所以它们也可以在JVM上面跑,这个就是JVM的跨语言特征。Java的跨语言性一定程度上奠定了非常强大的java语言生态圈。Java程序在运行的时候,主要就是执行字节码指令,一般这些指令会按照顺序解释执行,这种就是解释执行。原创 2024-08-19 15:42:42 · 1933 阅读 · 0 评论 -
为Java开疆拓土的ZGC深度剖析
ZGC(The Z Garbage Collector)是JDK 11停顿时间不超过10ms(JDK16已经达到不超过1ms);停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆,JDK15后已经可以支持16TB。这么去想,如果使用ZGC来做Java项目,像对STW敏感的证券系统,游戏的系统都可以去用Java来做(以前都是C或者C++的市场),所以ZGC的出现就是为了抢占其他语言的市场(卷!原创 2024-08-18 10:00:33 · 792 阅读 · 0 评论 -
阿里巴巴Arthas详解
/字符串常量池:"计算机"和"技术" 堆内存:str1引用的对象"计算机技术"//堆内存中还有个StringBuilder的对象,但是会被gc回收,StringBuilder的toString方法会new String(),这个String才是真正返回的对象引用String str2 = new StringBuilder("计算机").append("技术").toString();//没有出现"计算机技术"字面量,所以不会在常量池里生成"计算机技术"对象//true。原创 2024-08-17 21:37:01 · 3728 阅读 · 2 评论 -
JVM调优工具详解及调优实战
事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用。原创 2024-08-16 11:08:20 · 1138 阅读 · 0 评论 -
垃圾收集器G1&ZGC详解
G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.G1将Java堆划分为多个大小相等的独立区域(),JVM目标是不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可以超过该值,但是不推荐。原创 2024-08-15 23:47:00 · 1002 阅读 · 0 评论 -
Java垃圾收集底层算法实现
在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。漏标的问题主要引入了三色标记算法来解决。原创 2024-08-14 21:09:56 · 974 阅读 · 0 评论 -
Java垃圾收集器ParNew&CMS
分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。原创 2024-08-14 21:05:15 · 1609 阅读 · 0 评论 -
Java中class文件结构分析二
第17个常量池:01 00 15 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 5601:tag位表示的是utf8类型的字面量常量00 15 二个字节表示的是字面量常量的长度为21接下来21个字节: 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 表示字符串 (Ljava/lang/String;)V。原创 2024-08-13 10:28:15 · 794 阅读 · 0 评论 -
Java中class文件结构分析一
22为常量池类型的nameAndType类型,分别指向我们的常量池第#5(utf-8类型的常量)的位置表示我们的字段的名称userName,#6指向的是常量池第六个位置,类型是utf-8类型的值为:Ljava/lang/String;6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 字面量的值为:java/lang/Object。第十个常量分析:01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65。原创 2024-08-13 10:03:49 · 987 阅读 · 0 评论 -
JVM对象创建与内存分配机制深度剖析
指针压缩。原创 2024-08-12 11:04:46 · 1077 阅读 · 0 评论 -
JVM内存模型深度剖析与优化
对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。原创 2024-08-11 18:21:14 · 637 阅读 · 0 评论 -
从JDK源码级别彻底剖析JVM类加载机制
commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;sharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;原创 2024-08-10 10:32:09 · 779 阅读 · 0 评论 -
jstat命令查看jvm的GC情况
jstat查看jvm的统计信息1.centos7查看linux的java的pidps -ef|grep java结果:tomcat 19859 1 0 Oct21 ? 00:06:31 /usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tom...原创 2019-10-24 13:56:34 · 235 阅读 · 0 评论