
JVM
文章平均质量分 92
半间烟雨
这个作者很懒,什么都没留下…
展开
-
实战Java虚拟机-面试篇
运行时数据区指的是JVM所管理的内存区域,其中分成两大类:线程共享 – 方法区、堆方法区:存放每一个加载的类的元信息、运行时常量池、字符串常量池。堆:存放创建出来的对象。线程不共享 – 本地方法栈、虚拟机栈、程序计数器本地方法栈和虚拟机栈都存放了线程中执行方法时需要使用的基础数据。程序计数器存放了当前线程执行的字节码指令在内存中的地址。直接内存主要是NIO使用,由操作系统直接管理,不属于JVM内存。类加载器负载在类的加载过程中将字节码信息以流的方式获取并加载到内存中。原创 2024-05-27 17:41:15 · 716 阅读 · 0 评论 -
实战Java虚拟机-高级篇
Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah 并发执行大部分 GC 工作,包括并发的整理,堆大小对STW的时间基本没有影响。ZGC 是一种可扩展的低延迟垃圾回收器。ZGC 在垃圾回收过程中,STW的时间不会超过一毫秒,适合需要低延迟的应用。支持几百兆到16TB 的堆大小,堆大小对STW的时间基本没有影响。ZGC降低了停顿时间,能降低接口的最大耗时,提升用户体验。但是吞吐量不佳,所以如果Java服务比较关注QPS(每秒的查询次数)那么G1是比较不错的选择。原创 2024-05-23 18:07:45 · 1708 阅读 · 0 评论 -
实战Java虚拟机-基础篇
Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对堆上的内存进行回收。其他很多现代语言比如C#、Python、Go都拥有自己的垃圾回收器。原创 2024-05-08 11:15:08 · 1968 阅读 · 0 评论 -
实战Java虚拟机-基础篇
当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址。JDK8及之后的版本将方法区存放在元空间中,元空间位于操作系统维护的直接内存中,默认情况下只要不超过操作系统承受的上限,可以一直分配。used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。实例方法中的序号为0的位置存放的是this,指的是当前调用方法的对象,运行时会在内存中存放实例对象的地址。在类的加载阶段完成。原创 2024-05-06 16:24:47 · 664 阅读 · 0 评论 -
实战 JVM-基础篇
一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。Tomcat使用了自定义类加载器来实现应用之间类的隔离。每一个应用会有一个独立的类加载器加载对应的类。先来分析ClassLoader的原理,ClassLoader中包含了4个核心方法。原创 2024-05-06 14:52:19 · 900 阅读 · 0 评论