
JVM学习记录
文章平均质量分 82
本专栏用于记录JVM学习相关
你可以叫我仔哥呀
被代码耽误的段子手
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
学习笔记JVM篇(一)
2、当Eden区满了之后会触发MinorGC用于,此时如果对象还存活会被复制到S1(from)区,当下次一次MinorGC时,如果该对象还存活着,则会从S1移动到S2(to)区。3、虽然老年代的空间比较大,但是也会有满的时候,当老年代满了就会触发FullGC对整个堆的垃圾进行回收,我们优化JVM的关键就是减少FullGC。请注意,不同版本的JVM可能会有不同的默认值和支持的参数,因此在使用时应参考当前JVM版本的官方文档。4、堆内存中的垃圾回收基本使用分代算法,即不同的区域用不同的垃圾回收算法。原创 2024-09-15 08:51:51 · 937 阅读 · 0 评论 -
学习笔记JVM篇(二)
所谓的类加载就是把类字节码加载到JVM的方法区(方法区是个抽象的概念,具体实现可以是永久代用也可以是元空间),并将其转化为JVM内部数据结构的过程。自定义类加载器的场景:(1)扩展加载资源:例如可以从网络上加载某个类(2)防止源码泄露:通过自定义类加载器可以加载加密的类文件,从而保护源码(3)实现隔离(Tomcat中):一个Tomcat中运行着多个应用,所以需要隔离开。tips:Tomcat就是重写了loadClass方法从而破坏了双亲委派原则,进而实现了隔离。原创 2024-09-15 10:48:07 · 554 阅读 · 0 评论 -
学习笔记JVM篇(三)
可达性分析算法是通过一些列的GCRoot(后续再介绍),通过引用链的方式找到所有的对象,如果一个对象没有与任何GCRoot相连接,则可以认为该对象为垃圾对象。举个例子,清理了100个垃圾对象,每个对象1M,所以能空闲出100M的内存,但是由于垃圾是分布在内存的不同区域,就导致这些内存是不连续的,虽然总共清理出100M,但是此时如果想要存入一个100M的对象是做不到的。标记复制算法不适合大量存活对象的场景(例如老年代,大多数对象是存活的),因为大量对象存活意味着大量的对象要被复制,这样效率就很低。原创 2024-09-15 15:50:59 · 1354 阅读 · 0 评论 -
学习笔记JVM篇(四)
G1垃圾回收器保留了分代思想,但是取消了新生代和老年代的物理划分,把内存分为多个区域(Region),区域中的逻辑包含了新生代和老年代。区域是动态变化的,原先是老年代的区域,在之后可能会变成新生代,实现更精细化的内存划分。作用于新生代的,在Serial的基础上改为了多线程版本,使用多个线程进行垃圾回收。同时新增了名为Humongous的内存区域用于存储大对象,如果一个H区域装不下则G1会查询连续的H区域去存储该对象,为了找到连续的空间可能会触发Full GC。是一种并发的垃圾回收器,用的是标记-清除法。原创 2024-09-15 22:48:36 · 741 阅读 · 1 评论 -
学习笔记JVM篇(五)
代码解析:首先根据处理器数量来确定创建的线程数量,然后创建线程不断的死循环执行一些逻辑,这样可以让CPU寻思飙高。JPS全称 Java Process Status Tool,这个命令与Liunx的PS很像,下面我们测试一下这个命令,首先编写一段非常简单的Java代码。jstack是java栈的跟踪器,可以打印出java应用程序中所有线程的信息、包含堆栈信息、调用栈信息、锁等信息,所以常用于诊断死锁、内存泄漏等等。使用JPS命令,可以看到我们刚才启动的Java进程,同时进程号为7484。原创 2024-09-17 23:15:52 · 1280 阅读 · 0 评论