JVM
lufy0908
这个作者很懒,什么都没留下…
展开
-
JVM调优和深入理解性能优化
JVM调优的本质JVM调优主要调的是稳定,如果系统出现频繁的垃圾回收,这个时候系统是不稳定的,所以需要我们来进行JVM调优,调整垃圾回收的频次。GC调优原则1.大多数的java应用不需要GC优化。2.大部需要GC调优的不是参数问题,而是代码问题。3.分析GC情况优化代码比优化GC擦书多得多。4.GC调优是最后手段。观察需要调优的条件MinorGC执行时间不到50msMinorGC执行不频繁,约10s一次FullGC执行时间不到1sFullGC执行频率不算频繁,大于10分钟1次GC 调原创 2020-06-21 23:54:46 · 361 阅读 · 0 评论 -
JVM执行子程序
Class文件结构Class文件类每个 Class 文件的头 4 个字节称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的 Class 文件。后四位代表JDK的版本。版本推算:1.34(16进制)=56(十进制)2.java的版本号从45开始,56-45=73.jdk1.1+0.7=jdk1.8所以可推算class文件适运行在jdk1.8版本中。虚拟机栈运行时的栈桢结构局部变量表操作数栈动态连接方法返回地址重叠区域,同一个方法调用方法时原创 2020-06-16 18:45:29 · 151 阅读 · 0 评论 -
JVM垃圾回收算法与垃圾回收器
谁要GC?栈(线程)—不需要GC堆(对象)——需要GC方法区(存放字节码常量)——需要GCGC如何判断对象的存活?1.使用引用技术算法。2.可达性分析。引用计数算法给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。优点:快,方便,实现简单。缺点::对象相互引用时(A.instance=B 同时 B.instance=A),产生循环引用,很难判断对象是否该回收。可达性分析判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对原创 2020-06-15 20:46:03 · 115 阅读 · 0 评论 -
JVM中的对象
在java虚拟机中new指令时,对象的分配过程如下:检查加载-》分配内存-》内存空间初始化-》设置-》对象初始化。检查加载先执行相应的类加载过程,如果没有,则进行类加载。分配内存根据方法区的信息确定为该类分配内存空间大小。内存分配方式可分为“指针碰撞”和“空闲列表”两种方式。指针碰撞:java 堆内存空间规整的情况下使用。空闲列表:java堆空间不规整的情况下使用。如下图:具体使用哪种方式分配内存与使用的GC机制有关。在多线程环境下创建对象,虚拟机如何保证线程安全?在多线程环境下,原创 2020-06-14 20:38:32 · 95 阅读 · 0 评论 -
java字节码文件解读
有一个简单的main方法public class ConstantPool { public static void main(String[] args) { String b = "卧虎"; String a = b + "藏龙"; System.out.println(a.intern() == a); }}使用javac指定编译,将生成字节码文件ConstantPool.classjavac ConstantPool.jav原创 2020-06-13 23:04:51 · 132 阅读 · 0 评论 -
JVM内存区域
虚拟机的发展Hotspot VM是当今使用最广泛Java虚拟机。程序计数器的作用记录线程的执行进度,确保多线程程序正常执行。为什么JVM使用栈因为使用栈可以兼容方法调用方法的特点。JVM运行时序图局部变量表:存放我们的局部变量的。主要存放Java的八大基础数据类型,如果是Object对象,我们只需要存放引用类型地址。操作数栈:存放方法执行的操作数。动态链接:Java语言特定多态,需要类加载、运行时才能确定具体的方法。返回地址:调用程序计数器中的地址为返回。本地方法栈:各虚拟机自由实现原创 2020-06-13 00:47:04 · 131 阅读 · 0 评论