![](https://img-blog.csdnimg.cn/2020080523424244.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
文章平均质量分 67
✌ JVM调优记录
Kylee Kello
不一定每个人都会失败,但也不一定每个人都运气好。怎么做是你的自由。
展开
-
JVM - 【IDEA】JDK6、7、8、9、11、14安装配置
IDEA JDK安装及配置一:国内下载地址https://repo.huaweicloud.com/java/jdk/二:安装(Windows x64)可自定义指定JDK安装目录,JRE默认:C:\Program Files\JavaJDK11、JDK14安装后默认没有JRE三:IDEA配置配置编译环境配置运行环境...原创 2020-09-15 11:35:56 · 772 阅读 · 0 评论 -
JVM - 【类加载子系统】ClassLoader
ClassLoader加载类的三个过程...原创 2020-09-09 12:33:13 · 244 阅读 · 0 评论 -
JVM - 【对象内存布局】3部分 + JOL检测
对象内存布局对象在JVM中是如何存储的?对象头中都有哪些东西?一:对象头(Header)1> 运行时元数据HashCodeGC分代年龄对象持有的锁对象持有的锁状态线程ID…2> 类型指针指向元数据类型(指明当前类类型)obj.getClass()二:实例数据(Instance Data)1> 父类数据2> 子类数据三:对齐填充(Padding)确保内存规整附加图片(理解性)...原创 2020-09-14 11:03:26 · 282 阅读 · 0 评论 -
JVM - 【对象初始化过程】<clinit>、<init>
< clinit > + < init >< clinit > 完成类变量的初始化类变量定义静态代码块< init > 完成成员变量的初始化成员变量定义代码块构造函数对象中的各种成员在存放在内存中的什么地方?成员变量类变量一:< clinit >二:< init >三:对象中的各种成员在存放在内存中的什么地方?...原创 2020-10-27 10:53:08 · 515 阅读 · 0 评论 -
JVM - 【GC】四种引用类型
Java四种引用类型强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)一:继承关系图(JDK1.2)二:强引用(StrongReference)不可被回收package xyz.xx.chapter2;/** * -XX:+PrintGCDetails * * 强引用如果为可触及状态不会被GC回收 */public class StrongReferenceTest1原创 2020-09-16 09:40:31 · 403 阅读 · 0 评论 -
JVM - 【GC】垃圾回收期的发展及选择
GC的演变及选择推荐官网链接:【点我(有据可循)】一:图示二:GC选择除非您的应用程序有非常严格的暂停时间要求,否则请先运行您的应用程序并允许VM选择收集器(如果没有特别要求。使用VM提供给的默认GC就好)。如有必要,请调整堆大小以提高性能。 如果性能仍然不能满足您的目标,请使用以下准则作为选择收集器的起点:如果应用程序的数据集较小(最大约100 MB),则选择带有选项-XX:+ UseSerialGC的串行收集器。如果应用程序将在单个处理器上运行,并且没有暂停时间要求,则选择带有原创 2020-09-17 23:04:14 · 359 阅读 · 0 评论 -
JVM - 【内存泄漏】示例
阅读该文章之前,请务必了解Java四种引用类型及PhantomReference的使用;一:引入Java中由于引入了自动内存管理机制(GC),使得程序开发人员可以花费大量时间在业务逻辑上;内存泄漏的概念很早就已经出现,表示程序在运行过程中,对象已经不使用但是仍然在内存中占有自己的空间,不能被释放;在C++中,用户需要手动管理自己创建的所有对象,这也就意味着内存泄漏情况会经常出现、C++学习周期很长;Java中关于对象内存管理全部交付给JVM/GC去做,内存泄漏情况很少发生,但并不意味着再也不会发生原创 2020-10-09 17:33:05 · 293 阅读 · 0 评论 -
JVM - 【运行时数据区】栈帧与VMS
VMS:Virtual Mechine Stack(虚拟机栈)每个线程都会有自己的VMS,VMS本质上是一个栈,栈内部数据类型为“栈帧”;栈帧:局部变量表(LocalVariablesTable) 操作数栈/表达式栈(Operand Stack/Expression Stack) 一:配置VMS大小JVM - 【HotSpot参数配置】-Xss二:局部变量表从编译后的字节码指令可以看出:byte、short、int、char、boolean在写入操作数栈中都会以.原创 2020-09-12 11:48:53 · 658 阅读 · 0 评论 -
JVM - 【执行引擎】解释器与JIT
执行引擎 - 解释器与JITExecute EngineInterpreterJust-In-Time Compiler一:什么是解释器与JIT?1> 解释器解释器将字节码直接翻译为机器指令执行(Java);在Python中不存在字节码,cPython会直接将python程序翻译为机器指令执行。2> JITJust-In-Time 即时编译器,属于后端编译器(程序运行时动态编译),常与解释器配合使用,互惠互利。二:HotSpot执行引擎策略原创 2020-09-14 19:13:38 · 656 阅读 · 0 评论 -
JVM - 【字符串常量池】-XX:StringTableSize
字符串常量池 - StringTable一:配置常量池大小-XX:StringTableSize=60013JDK1.6默认为1009,JDK1.7之后默认为60013,字符串常量池底层为HashTable,合理增大常量池大小会解决Hash冲突问题JDK1.8开始1009是可以设置的最小值二:测试(常量池大小对执行效率的影响)package xyz.xx.chapter_string;import java.io.BufferedReader;import java.io.F原创 2020-09-14 23:30:35 · 1135 阅读 · 0 评论 -
JVM - 【字符串常量池】new String(“hello“)会创建几个对象?
new String(“hello”)会创建几个对象 ?一:测试package xyz.xx.chapter1;/** * new String()会创建几个对象? */public class StringTest2 { public static void main(String[] args) { // 2 String a = new String("hello"); // 1 String b = "hello原创 2020-09-15 14:43:45 · 283 阅读 · 0 评论 -
JVM - 【字符串常量池】字符串拼接操作
字符串拼接操作String a = "hello" + "world";final String a = "hello";String b = a + "world";String a = "hello";String b = a + "world";一:方式一分析及验证二:方式二分析及验证三:方式三分析及验证含有变量的字符串在拼接时,根据JDK版本不同,底层实现也相应不同;四:面试题注意:JDK9及之后现不做分析(~)package xyz.xx.原创 2020-09-15 15:59:40 · 717 阅读 · 0 评论 -
JVM - 【对象实例化过程】6个阶段
对象实例化过程 - 六个阶段加载类元信息至"方法区"在堆中分配内存内存规整内存不规整处理并发问题加锁设置TLAB(Thread Local Allocation Buffer)-XX:+UserTLAB-XX:TLABWasteTargetPercent=1%默认赋值成员变量赋默认值< clinit >设置对象头信息显式初始化成员变量代码块构造函数(< init >)一:显式初始化阶段package xyz原创 2020-09-14 11:07:45 · 443 阅读 · 0 评论 -
Java - 【方法区】OOP多态上下转型(非静态内容)
类在方法区中的存储(非静态内容)一:测试代码package xyz.xx.day02.down;/** * 多态上下转型测试 */public class OOPTest1 { public static void main(String[] args) { Cat cat = new Cat("咪咪",1,"白色"); System.out.println(cat); Animal ani = new Cat("咪咪",2,"白色"原创 2020-09-17 21:52:58 · 190 阅读 · 0 评论 -
JVM - 【GC】使用JProfiler查找指定类的GCRoot(s)
GC篇 - 使用JProfiler查找指定类的GC-Root(s)一:JProfiler下载安装与集成二:测试package xyz.xx.chapter3;/** * 使用JProfiler查找某个类的GcRoot(s) */public class GCRootTest { public static void main(String[] args) { Obj o = new Obj(); try { Thread原创 2020-09-16 17:40:00 · 1387 阅读 · 0 评论 -
JVM - 【HotSpot参数配置】-Xss
Java HotSpot VM OptionsVMS:Java Virtual Machine Stack每个线程都有自己独立的VMS、PC、NMS一:查看JVM中VMS默认大小-XX:+PrintFlagsInital二:设置VMS大小注意:测试实验结果:-Xss512k 会将ThreadStackSize设置为512k,递归测试正常-XX:ThreadStackSize=512k 会将Thr...原创 2020-09-11 09:43:58 · 683 阅读 · 0 评论 -
JVM - 【HotSpot参数配置】Heap
Heap链接:Java虚拟机规范一:堆参数初始化配置-Xms MemoryStart-Xmx MemoryMax二:-XX:-UseAdaptiveSizePolicy三:查看配置后的堆内存大小1> jvisualvm2> jps + jstat -gc PID3> -XX:+PrintGCDetails四:堆内存详细划分...原创 2020-09-13 17:08:00 · 204 阅读 · 0 评论 -
JVM - 【HotSpot参数配置】-XX:+PrintFlags***
-XX:+PrintFlags[Initial/Final]启动参数二:-Xms600m -Xmx600m -XX:+PrintFlagsFinal -XX:NewRatio=5使用JDK提供的默认工具:jps jinfo -flag NewRatio [PID]原创 2020-08-05 23:52:39 · 827 阅读 · 0 评论 -
JVM - 【HotSpot参数配置】 -XX:-UseAdaptiveSizePolicy
启动参数一:-Xms600M -Xmx600M -XX:SurvivorRatio=8 -XX:NewRatio=4-XX:SurvivorRatio默认为8 -XX:NewRatio默认为2-XX:SurvivorRatio默认为8,单独使用初始时生效,但是由于-XX:+UseAdaptiveSizePolicy默认开启,后期会自动调节Survivor区的大小,取消自适应即可使得-XX:SurvivorRatio生效!启动参数二:-Xms600M -Xmx600M -XX:.原创 2020-08-05 23:36:18 · 3387 阅读 · 1 评论 -
JVM - 【HotSpot代码优化】标量替换
HotSpot代码优化 - 标量替换问题:代码中所有new的对象都是分配在Heap上吗? NO!一:单词汇总scalar n.标量aggregate n.聚合量aggressive adj. 好斗的,侵略性的escape vt.逃避、逃逸analysis n.分析allocation n.分配eliminate vt.消除、排除、淘汰二:优化参数-XX:+D原创 2020-09-13 23:48:29 · 536 阅读 · 0 评论