2023年3月19日
摘要: JVM内存分布图 执行字节码的模块叫做执行引擎,执行引擎依靠程序计数器恢复线程切换。本地内存包含元数据区域以及一些直接内存。 程序计数器(Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行字节码的行号指示器,指向下一个将要执行的指令代码,由执行引擎来读 阅读全文
posted @ 2023-03-19 23:35 zhengbiyu 阅读(95) 评论(0) 推荐(0) 编辑
摘要: Object objectRef = new Object(); 假设这句代码出现在方法体中,Object objectRef这部分将会反映到Java栈的本地变量中,作为一个reference类型数据出现。而new Object()这部分将会反映到Java堆中,形成一块存储Object类型所有实例数 阅读全文
posted @ 2023-03-19 23:16 zhengbiyu 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 在发布或重启某线上某服务时,常常发现有些机器的load会飙到非常高(高达70),并持续较长一段时间(5分钟)后回落,与此同时响应时间曲线也与load曲线一致。注:load飙高的初始时刻是应用服务端口打开,流量打入时(load)。 发布时候load飙高 发布时候响应时间飙高 cpu使用率较高的两个线程 阅读全文
posted @ 2023-03-19 20:48 zhengbiyu 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 创建bootstrapClassLoader,创建启动器Launcher。 父子加载器的类关系不是继承关系,子加载器通过parent变量引用父加载器。 为什么类加载的顺序不是从引导类加载器先加载,而是从应用类加载器加载? 因为只有AppClassLoader会检查类是否已被加载过。因为项目中大部分代 阅读全文
posted @ 2023-03-19 20:43 zhengbiyu 阅读(18) 评论(0) 推荐(0) 编辑
摘要: tomcat如何实现,应用隔离类加载? org.apache.catalina.loader.WebappClassLoaderBase#loadClass(java.lang.String, boolean) (1)先在本地缓存中查找是否已经加载过该类(对于一些已经加载了的类,会被缓存在resou 阅读全文
posted @ 2023-03-19 20:37 zhengbiyu 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 类加载顺序图: 这样做的好处就是:Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存放在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都是同一个类 阅读全文
posted @ 2023-03-19 20:28 zhengbiyu 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有指针碰撞和空闲列表两种,选择哪种分配方式由 Java 堆是否规整决定,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。 内存分配的两种方式 (补充内容 阅读全文
posted @ 2023-03-19 20:21 zhengbiyu 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 首先进行类加载,然后会对象进行逃逸分析,如果对象引用不会逃逸,那么进行栈上分配。 编译器分层编译:C1、C2。C2下才会有栈上分配的优化,且不同虚拟机优化方式不一样,Hotspot虚拟机使用的是标量替换方式进行优化,把对象拆解,让对象的成员变量分配在栈上。 Class 文件需要加载到虚拟机中之后才能 阅读全文
posted @ 2023-03-19 20:19 zhengbiyu 阅读(12) 评论(0) 推荐(0) 编辑
摘要: -XX:+PrintCommandLineFlags 打印那些已经被用户或者JVM设置过的详细的xx参数的名称和值。 -XX:+PrintFlagsInitial 打印所有JVM参数启动的初始值 -XX:+PrintFlagsFinal 打印所有JVM参数的最终值 -Xms6144m -Xmx614 阅读全文
posted @ 2023-03-19 20:02 zhengbiyu 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 如果 young gc 线程只遍历年轻代内的对象引用,那么老年代到年轻代的跨代引用就会被忽略,被老年代存活对象跨代引用的年轻代对象会被回收,这样就破坏了应用程序的运行。但是如果每次ygc都进行全堆扫描,且ygc次数较频繁,会很慢。在 young gc 时,为了找到跨代引用,通常有这几个方法: 当对象 阅读全文
posted @ 2023-03-19 19:02 zhengbiyu 阅读(32) 评论(0) 推荐(0) 编辑