jvm
文章平均质量分 89
summerZBH123
这个作者很懒,什么都没留下…
展开
-
Java对象和类的生命周期
在java当中一个对象被创建,再被引用指向,然后参与一系列的逻辑计算,到最后被垃圾回收掉,这个过程是怎样的,对我们开发来说也是极其重要的对象的生命周期 对象在JVM当中的生存周期一般都是从 创建(created)-->应用(in use)-->不可见(invisiable)-->不可达(unreachable)-->收集(collected)-...原创 2018-07-10 20:45:55 · 909 阅读 · 0 评论 -
什么时候触发MinorGC?什么时候触发FullGC?
触发MinorGC(Young GC) 虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间 1、如果大于的话,直接执行minorGC 2、如果小于,判断是否开启HandlerPromotionFailure,没有开启直接FullGC 3、如果开启了HanlerPromotionFailure, JVM会判断老年代的最大...转载 2018-07-23 21:28:21 · 7459 阅读 · 6 评论 -
G1收集器
G1收集器是在JDK1.7开始可以设置使用,在JDK1.9时设置为默认垃圾收集器。G1收集器和其他收集器相比有以下特点并行与并发:G1能充分利用多CPU、多核的硬件优势,来缩短Stop-The-World停顿时间 分代收集:和其他收集器相同,分代概念依然保留。G1收集器不需要其他收集器的配合就可以管理整个堆,可以根据不同的方式去处理新创建的对象、存活了一段时间的对象和熬过多次GC的对象。 ...原创 2018-07-23 21:28:08 · 1972 阅读 · 0 评论 -
JAVA对象头信息
HotSpot虚拟机当中,java对象的结构包括以下几个方面,对象头、实例数据和对齐填充。对象头用来保存程序运行时,对象当中的信息,实例数据用来保存当前对象具体存储的数值。关于对象头当中存储的信息对象头包括两个部分:Mark Word和类型指针,如果是数组类型的话,还会多一个数组长度MarkWord Mark Word当中包括,对象的hashCode,分代年龄,锁标记位,...原创 2018-07-23 21:28:46 · 1358 阅读 · 0 评论 -
JVM常用的参数
主要是记录一些比较常用的JVM参数,总会有用到的时候。-XX:+PrintGC 打开GC的开关,如果系统发生GC,就会打印GC日志-XX:PrintGCDetails打印gc的详细信息-verbose:gc输出gc信息-XX:PrintGCTimeStamps打印GC,及GC发生的时间-Xloggc:/gc.log将gc的信息打印在当前应用的根路径的gc.l...原创 2018-07-23 21:28:59 · 164 阅读 · 0 评论 -
JVM加载类的方式及存在的问题(附带代码演示)
JVM当中提供了两种类加载器1、Java虚拟机自带的类加载器 根类加载器(Bootstrap)、扩展类加载器(Extension)、系统(应用)类加载器(System)2、自定义的类加载器 用户可以通过继承java.lang.ClassLoader类,然后重写自己定义的类加载器。何时加载一个类: 类加载器并不需要等到某个类在首次主动使用时再加载它。JVM规范允许...原创 2018-07-18 22:36:29 · 437 阅读 · 0 评论 -
CMS垃圾收集器执行过程
这篇博客主要是介绍CMS垃圾收集器的执行过程,并不会进行很详细的说明,如果想了解每个过程的详细步骤,可以查看下面的参考博客。 CMS垃圾收集器首先需要注意的一点,是用来对堆中老年代当中的垃圾进行回收的,CMS收集器的主要目标就是致力于降低垃圾回收的暂停时间,CMS GC和Full GC是不同的,CMS GC主要关注的是老年代的GC, Full GC是针对整个堆的GC。关于CMS垃圾收集...原创 2018-07-23 21:28:33 · 953 阅读 · 0 评论 -
JVM什么情况下初始化一个类(代码示例)
在前面的日志当中,已经介绍过类的生命周期类加载 将已经存在的class文件从磁盘当中加载到内存中,查找类的二进制数据,如果不存在直接抛出异常连接 验证:确保被加载类的正确性,确保字节码没有被恶意修改 准备:为类的静态变量分配内存,并将其初始化为默认值,整型的默认值是0,引用类型是null, 程序当中赋值是1,但是这里会把int默认值设置为0, 解析:将类当中的符号引...原创 2018-07-19 21:12:59 · 296 阅读 · 0 评论 -
JVM垃圾回收
之前我们介绍了jvm的内存结构,了解到对于程序计数器、jvm虚拟机栈和本地方法栈,是属于线程私有的,每个线程对应一套,而对于堆和方法区,是属于线程共享的,我们讨论的垃圾回收也主要是针对堆和方法区的内存回收 关于java堆内存的分配 虚拟机当中将堆内存从逻辑上分成了三大块:年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Ge...原创 2018-07-11 20:28:20 · 153 阅读 · 0 评论 -
Java当中强引用、软引用、弱引用及虚引用
java当中提供了四种类型的引用,分别是强引用、软引用、弱引用和虚引用,java当中提供这些类型的引用,主要是为了方便在垃圾回收时,将不需要的对象清理掉,从而不至于引发OOM异常错误。强引用 在我们前面介绍java当中对象的生命周期时,如果一个对象有强引用关系,那么将不会被垃圾回收收走,哪怕是抛出OOM异常,也不会回收。通常我们通过new 的方式创建的引用,都是强引用关系Object obj...原创 2018-07-10 21:49:42 · 159 阅读 · 0 评论 -
Java内存结构
这篇文章尽量将每个区域的作用,以及特点描述清楚,直到他们会在什么时候用到,关于其相关的概念,暂不做展开分析 java内存结构由以下几个部分组成 程序计数器 堆 本地方法栈 虚拟机栈(也叫java栈) 方法区接下来就主要介绍每个区的是干什么的,以及有什么作用程序计数器 ...原创 2018-07-10 20:45:44 · 553 阅读 · 0 评论 -
JVM问题总结
1、如果cpu使用率一直过高如何处理 a) top命令查询到占用率比较高的进程pid, 如果是java进程,接下来进一步分析 b)接下来根据进程pid,去查询相应的线程id信息 ps -mp pid -o THREAD,tid,time c)找到使用率比较高的线程id,假设为6677,通过linux命令转为16进制 ...原创 2018-08-08 19:40:29 · 342 阅读 · 0 评论