![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 89
Seven_97H
这个作者很懒,什么都没留下…
展开
-
自定义类加载器加载java.lang.String?
写了个java.lang.ClassLoader,把preDefineClass()方法里那段if直接删掉,再用编译后的class替换rt.jar里面的,直接通过命令jar uvf rt.jar java/lang/ClassLoader/class即可。加载同一个类MyClassLoader,使用的类加载器不同,说明这里是打破了双亲委派机制的,但是尝试加载String类的时候报错了。那么既然是ClassLoader里面的代码做的限制,那把ClassLoader.class修改了不就好了吗。原创 2023-11-06 10:53:47 · 64 阅读 · 0 评论 -
JVM调优
这里的吞吐量是指应用程序所花费的时间和系统总运行时间的比值。我们可以按照这个公式来计算 GC 的吞吐量:系统总运行时间 = 应用程序耗时 +GC 耗时。如果系统运行了 100 分钟,GC 耗时 1 分钟,则系统吞吐量为 99%。GC 的吞吐量一般不能低于95%:指垃圾收集器正在运行时,应用程序的暂停时间。对于串行回收器而言,停顿时间可能会比较长;而使用并发回收器,由于垃圾收集器和应用程序交替运行,程序的停顿时间就会变短,但其效率很可能不如独占垃圾收集器,系统的吞吐量也很可能会降低。原创 2023-11-06 10:53:00 · 32 阅读 · 0 评论 -
自定义一个String类
可以自定义包名不为java.lang的String类,并区别包名正常使用自定义包名为java.lang的String类String类下写main方法:由于双亲委派模型,在加载String类时,会最终委派给Bootstrap ClassLoader去加载,加载的是rt.jar包中的那个java.lang.String,而rt.jar包中的String类是没有main方法的,因此报错误。原创 2023-11-06 10:52:20 · 279 阅读 · 0 评论 -
类的加载和加载器
类的加载过程:加载:将java文件加载为字节码class文件验证:确保Class文件的字节流中包含的信息符合JVM规范准备:为 static 变量分配空间,设置默认值解析:将常量池内的符号引用替换为直接引用初始化:执行类构造器JDK中有三个默认类加载器:AppClassLoader、ExtClassLoader、BootStrapClassLoader。原创 2023-11-06 10:51:36 · 34 阅读 · 0 评论 -
G1收集器 - 垃圾回收器(GC)
JDK 9以后默认使用,替代了CMS 收集器。原创 2023-11-06 10:48:19 · 131 阅读 · 0 评论 -
垃圾回收(GC)器
指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态。指用户线程与垃圾收集线程同时工作(不一定是并行的可能会交替执行)。用户程序在继续运行,而垃圾收集程序运行在另一个CPU上即CPU用于运行用户代码的时间与CPU总消耗时间的比值(吞吐量 = 运行用户代码时间 / ( 运行用户代码时间 + 垃圾收集时间 )),也就是。例如:虚拟机共运行100分钟,垃圾收集器花掉1分钟,那么吞吐量就是99%原创 2023-11-06 10:47:48 · 22 阅读 · 0 评论 -
GC(垃圾回收)算法
GC( Garbage Collection ),垃圾回收,是Java与C++的主要区别之一。作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码。这是因为在Java虚拟机中,存在自动内存管理和垃圾清理机制。对JVM中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,保证JVM中的内存空间,防止出现内存泄露和溢出问题。finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。原创 2023-11-06 10:47:12 · 58 阅读 · 0 评论 -
常量(StringTable)池
二进制字节码的组成:类的基本信息(构造方法,接口的定义)、常量池、静态变量、类的方法定义(包含了虚拟机指令)通过反编译来查看类的信息(框内的是真正编译执行的内容,#号的内容需要在常量池中查找)原创 2023-11-06 10:46:02 · 24 阅读 · 0 评论 -
JVM 虚拟机
线程私有的,作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址。每个线程运行需要的内存空间,称为虚拟机栈每个栈由多个栈帧组成,对应着每次调用方法时所占用的内存每个线程只能有一个活动栈帧,对应着当前正在执行的方法Java 虚拟机栈是由一个个栈帧组成,栈顶存放当前方法,而每个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息。每一次函数调用都会有一个对应的栈帧被压入虚拟机栈,每一个函数调用结束后,都会有一个栈帧被弹出。原创 2023-11-06 10:45:11 · 39 阅读 · 0 评论 -
强软弱虚四种引用
Java 程序通过栈上的 reference 数据来操作堆上的具体对象。原创 2023-11-06 10:44:04 · 131 阅读 · 0 评论 -
JDK/JRE/JVM三者的关系
JRE = JVM + Java 核心类库JDK = JRE + Java工具 + 编译器 + 调试器。原创 2023-09-24 16:50:57 · 73 阅读 · 1 评论 -
常量(StringTable)池
二进制字节码的组成:类的基本信息(构造方法,接口的定义)、常量池、静态变量、类的方法定义(包含了虚拟机指令)通过反编译来查看类的信息(框内的是真正编译执行的内容,#号的内容需要在常量池中查找)原创 2023-09-24 16:35:00 · 60 阅读 · 1 评论