JVM
文章平均质量分 62
江城507
这个作者很懒,什么都没留下…
展开
-
JVM堆-JVM运行时内存
将Eden区满了的对象,添加到Survivor区,等对象反复清理几遍之后都没清理掉,再放到老年区,这样老年区的压力就会小很多。即Survivor相当于一个筛子,筛掉生命周期短的,将生命周期长的放到老年代区,减少老年代被清理的次数。首先,把Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果ServicorTo不够位置了就放到老年区);因为有的对象寿命长,有的对象寿命短。...原创 2022-07-28 20:53:44 · 56 阅读 · 0 评论 -
垃圾收集算法和垃圾收集器
由于耗时最长的并发标记和并发清除过程中,垃圾收集线程可以和用户现在一起并发工作,所以总体上来看CMS收集器的内存回收和用户线程是一起并发地执行。这样做的好处是可以控制一次回收多少个区间,根据目标停顿时间,每次合理的回收若干个小区间(而不是整个堆),从而减少一次GC产生的停顿时间。老年代每次GC只有少量垃圾被回收,新生代每次GC会有大量的垃圾被回收,因此可以根据不同的区域选择不同的算法。为了修正在并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,仍然需要暂停所有的工作线程。.....原创 2022-07-28 20:35:05 · 144 阅读 · 0 评论 -
Java中的四种引用类型区别
当垃圾回收器准备回收一个对象时,如果发现它还有虚引,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。弱引用需要用WeakReference类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管JVM的内存空间是否足够,总会回收该对象占用的内存。弱引用可以用来替换手动清理的过程,比如当一个用户下线时,我们可能在不同的地方保存了对这个用户的信息,如果使用弱引用保存信息,当这个用户的强引用消失时,下一次GC会自动回收。强引用不会被GC回收;...原创 2022-07-24 21:59:35 · 131 阅读 · 0 评论 -
对象死亡,常量是废常量,类是无用类
假如在常量池中存在字符串"abc",如果当前没有任何String对象引用该字符串常量的话,就说明常量"abc"就是废弃常量,如果这时发生内存回收的话而且有必要的话,"abc"就会被系统清理出常量池。引用计数器法为对象添加一个引用计数器。每当对象在一个地方被引用,计数器加1;每当对象失效时,对象减1.但对象计数器为0时,表示该对象没有被引用。可达性分析算法通过一系列被称之为“GCRoots”的根节点开始,沿着引用链进行搜索,凡是在引用链上的对象都不会被回收。...原创 2022-07-24 21:39:52 · 103 阅读 · 0 评论 -
String类和常量池
当类加载到内存中后,JVM就会将class文件常量池中的内容存放到运行时常量池中,由此可知,运行时常量池也是每个类都有一个。class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,我们编写的java文件就被编译为.class文件格式的二进制数据存放在磁盘中,其中就包括class文件常量池。class文件中存在常量池(非运行时常量池),其在编译阶段就已经确定,jvm规范对class文件结构有着严格的规范,必须符合此规范的class文件才能被jvm任何和装载。class文件常量池。...原创 2022-07-24 21:31:23 · 274 阅读 · 0 评论 -
类的加载过程与类加载器
JVM想要执行 .class文件,需要类加载器将 .class文件搬运到JVM虚拟机中。而类加载的过程包括:加载,验证,准备,解析,初始化五个阶段。原创 2022-07-23 21:24:59 · 248 阅读 · 0 评论 -
Java内存区域
JVM内存区域主要分为线程私有区域【程序计数器,本地方法栈,虚拟机栈】,和线程共享区域【方法区,堆】原创 2022-07-22 21:37:44 · 185 阅读 · 0 评论