jvm知识点(含推荐网课)

JVM中的内存分配及GC回收过程简单整理
b站jvm视频
可能是把Java内存区域讲的最清楚的一篇文章
史上最全Java面试266题:算法+缓存+TCP+JVM+搜索+分布式+数据库
JVM架构和GC垃圾回收机制(JVM面试不用愁)
GUAVA collection utils官方文档
Google Guava中文文档
大牛整理的各种知识点详解
Collections 工具类和 Arrays 工具类常见方法
Java 并发进阶常见面试题总结

StopTheWorld的触发
Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起
(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,
但不能与JVM交互;这些现象多半是由于gc引起。
幸存区对象进入老年区的条件
	为了更好的适应不同程序的内存情况,虚拟机不是永远要求对象年龄必须达到了某个值才能进入老年代,如果
Survivor 空间中相同年龄所有对象大小的总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象就可以
直接进入老年代,无需达到要求的年龄。

判断对象已经死亡
1. 引用计数法:这个方法实现简单,效率高,但存在对象引用循环的问题。
	给对象中添加一个引用计数器,每当有地放引用他,计数器就加一;当引用失效,计数器就减一,
当计数器为0时,就代表该对象已经死亡不再被引用了。
新生代中为什么要分为Eden和Survivor
因为若是没有survivor区,每次minorGC 幸存的对象直接进入老年区的话,老年区很快会被填满。
紧接着就是触发fullGC,而fullGC会消耗大量的时间,因为老年区比新生代的内存大得多。降低执行速度。

类加载进内存

当new一个对象时,jvm发生了什么。

1、加载
	将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口,这个过程需要类加载器参与。
2、连接 
    验证:确保Class文件中字节流包含的信息是否符合虚拟机的要求,保证不会危害虚拟机自身的安全
    准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配
    解析:虚拟机将常量池中的符号引用替换为直接引用的过程
3、初始化
    当使用new创建一个对象时,jvm会在堆中分配一个内存存放该对象。
	一个类通过类加载器把一个类的二进制文件加载进方法区,也就是说方法区存放类的信息,类信息包括:类的版本、字段、方法、接口等描述。
	
	常量池是类信息的一部分,主要存放俩大类常量:字面量和符号引用量。
	字面量就是: 
		final修饰的变量和字符串常量,
	符号引用量是:
    	类和接口的全限定名  字段名称和描述符  方法名称和描述符.
    	
	运行时常量池是方法区的一部分,虚拟机加载class文件后把常量池中的数据存放到运行时常量池中。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值