jvm
darkness0604
这个作者很懒,什么都没留下…
展开
-
JVM之对象引用的四种类型:强软弱虚
在java中,一个对象的引用其实是分为好几种的,每种类型意味着这个对象具体会在什么时候会被回收。对象的引用根据它被垃圾回收的时机,可以分为强、软、弱、虚四种。我们日常中不了解这个的时候,自己定义的引用类型变量基本都是属于强引用。接下来分别使用过四段代码来分别演示这四种类型:import org.junit.Test;import java.io.IOException;import ...原创 2020-04-09 20:46:33 · 290 阅读 · 0 评论 -
JVM第十七天-并发标记算法原理
CMS和G1的核心都是并发标记,算法是一样的。难点因为是并发, 存在垃圾标记的过程中,新垃圾的产生或者已有垃圾的无效化(不是垃圾了)的问题。核心算法 三色标记法漏标问题黑色对象A指向了白色对象D与此同时,灰色对象B取消了对白色对象D的引用指向。此时,D被视为垃圾对象,但实际被A引用,可A已经被标记成黑色了,不会二次标记了,也就造成了D的漏标。如何解决漏标问题发生漏标是在...原创 2020-04-08 23:06:30 · 1994 阅读 · 1 评论 -
JVM第十六天-G1详解
G1的必要性我们之前讨论的完全分代模型下的垃圾回收器(PS,PO,PAR NEW ,CMS)无论是哪个垃圾回收器是用了哪种回收算法,当随着内存的日益增大,在当今时代大内存的背景下,它们的内存模型因为都是大块空间连续存储的,因此当随着内存非常大的时候,都会变得清理起来非常的费劲。而如果你接触大数据相关的东西,应该有一个概念,这个世上,所谓“大”的东西,都可以通过分成一小片一小片的思路进行解决,...原创 2020-04-08 23:00:44 · 1493 阅读 · 0 评论 -
JVM第十五天-JVM调优-arthas的使用
Arthas简介arthas是啥? 一款阿里出品的在线JVM监测工具为什么需要在线排查?在生产上我们经常会碰到一些不好排查的问题,例如线程安全问题,用最简单的threaddump或者heapdump不好查到问题原因。为了排查这些问题,有时我们会临时加一些日志,比如在一些关键的函数里打印出入参,然后重新打包发布,如果打了日志还是没找到问题,继续加日志,重新打包发布。对于上线流程复杂而且...原创 2020-04-08 22:53:11 · 1121 阅读 · 0 评论 -
JVM第十四天-JVM调优-调优实战和常用工具
调优前的基础概念1、吞吐量:用户代码时间 /(用户代码执行时间 + 垃圾回收时间)2、响应时间:STW越短,响应时间越好所谓调优,首先确定,追求啥?吞吐量优先,还是响应时间优先?还是在满足一定的响应时间的情况下,要求达到多大的吞吐量…场景分析选择像类似于科学计算,数据挖掘,这种追求吞吐量优先的,一般选用(PS + PO)垃圾回收器组合对于对响应时间要求比较高的,类似于网站,GUI渲染,...原创 2020-04-04 23:04:01 · 445 阅读 · 1 评论 -
JVM第十三天-GC-GC日志查看
每种垃圾回收器的格式都是不同的,这里我们分别分析一下ps,cms,g1的日志。Parallel Scavenge日志[root@dream01 jvm]# java -XX:+PrintGCDetails HelloGCHelloGC!//第一段[GC (Allocation Failure) [DefNew: 7675K->256K(9216K), 0.0040152 secs...原创 2020-04-04 22:42:51 · 329 阅读 · 0 评论 -
JVM第十二天-GC-常用命令行参数
HotSpot JVM参数分类标准: - 开头,所有的HotSpot都支持非标准:-X 开头,特定版本HotSpot支持特定命令不稳定:-XX 开头,下个版本可能取消通用命令-Xmn 指定堆内年轻代初始化大小(如果只指定这个参数,那么最大大小也是这个大小)-Xms 指定堆初始化大小-Xmx 指定堆最大大小(堆的初始化大小和最大大小建议设置成一致,不要有弹性,会导致系统消耗计算资源)...原创 2020-04-02 21:37:49 · 484 阅读 · 0 评论 -
JVM第十一天-GC-常见垃圾回收器
每次都要经历一个过程。。。 就是从有道云笔记向CSDN迁移,奈何粘过来图片,格式全没了,还要重新用markdown格式来一遍,为啥直接用makrdown呢? 因为我觉得markdown对于图片的存放比较麻烦,还是有道云笔记比较好,图片直接粘,写笔记时无阻断,多端同步。。 所以,麻烦是麻烦,但是对于我来说,尽可能放在一个不会丢的地方是最省心的了。。。不多bb。。 继续开干今天的东西。。。常见...原创 2020-04-01 20:33:56 · 453 阅读 · 1 评论 -
JVM第十天-GC-GC基础知识
什么是垃圾?当一个对象,没有任何引用指向它,这个对象就可以被称作垃圾。JAVA和C++内存管理的对比怎么定位垃圾?定位垃圾的算法有两种:1、引用计数算法(ReferenceCount)也就是对象身上有个计数器,记录着有几个对象引用着它。当计数器为0的时候,这个对象就被视为一个垃圾了。不能解决的问题循环引用引用计数,不能解决这种,一堆垃圾,没有外部指向它们,但它...原创 2020-04-01 14:20:27 · 379 阅读 · 0 评论 -
JVM第九天-运行时数据区与JVM操作指令集
前面我们说了一个class被加载到JVM中的具体过程,它包含 load,link,initialize。在此之后,被加载到JVM后,将被执行引擎进行执行,这时候就涉及到了JVM运行时的一些数据区分布了。运行时数据区分布PC 程序计数器(Program Counter)它用于存放指令位置。虚拟机的运行,类似于这样的循环:while( not end ) { 取PC中的位置,找到对应...原创 2020-03-31 00:38:59 · 283 阅读 · 0 评论 -
JVM第八天-JMM之对象的内存分布
1、对象的创建过程2、对象在内存中的存储布局这个要分为两种情况来看:1、普通对象一个一般对象的构成,分成这么四个部分:1、对象头:在hotspot的实现中叫markword,占用 8个字节2、ClassPointer指针:指向当前对象所属Class的一个指针,大小会根据JVM启动参数而定,-XX:+UseCompressedClassPointers 为4字节 不开启为8字节3、实...原创 2020-03-29 15:14:43 · 286 阅读 · 0 评论 -
JVM第七天-JMM之JAVA内存模型
JMM八大数据原子操作JAVA内存模型hanppens-before原则原创 2020-03-29 15:10:00 · 184 阅读 · 0 评论 -
JVM第六天-JMM之硬件级别内存模型
我来啦。。。。今天继续来肝JVM!!!!硬件层的并发优化基础知识现代CPU的处理速度很快,大约比内存快100个数量级,比硬盘就快更多了,可能100W个数量级。CPU很快,但如果它读取的地方需要耗时很慢,那么这将是个瓶颈,因此诞生出了这么一个多级缓存的结构。如果你不是很要求速度,甚至可以将资源存储在远程进行存储。稍微好一点的,是放在本地磁盘,但还是很慢。这时考虑到内存了,内存是磁盘寻址的...原创 2020-03-29 00:21:07 · 332 阅读 · 0 评论 -
JVM第五天-指令乱序性
乱序性实际上,如果两个语句操作之间不存在依赖关系,是有可能会被乱序执行的,这是因为指令重排序的原因。这也意味着,一个对象的创建在多线程情况下是可能有问题的。这里我们拿设计模式中的单例模式举例:public class Mgr06 { private static Mgr06 INSTANCE; private Mgr06() { } public sta...原创 2020-03-28 13:00:31 · 366 阅读 · 0 评论 -
JVM第四天-Class三大声明周期之Linking和Initializing
一般来说,class的加载过程比较繁琐,因此我们之前比较大篇幅的进行了描述,但相对而言,class之后的2个步骤Linking和 Initializing就相对简单了一些,这次我们就来把剩下的两个讲完。Linking把class链接的过程,它又分为三小步:1、Verification验证文件是否符合JVM规定(例如是否包含cafe babe之类的规范内容)2、Preparation静...原创 2020-03-27 21:39:42 · 807 阅读 · 6 评论 -
JVM第三天-Class三大生命周期之Class加载原理
一个class的生命周期分为四步:loading、linking、initalizing、被GC回收。其中一个class变成完全状态是需要经过loading、linking、initalizing三步的,我们一个个来具体分析。Loading就是把一个class加载到内存的过程。在java中,是通过一种叫做ClassLoader的类进行对类的加载工作的。ClassLoader是一个顶级...原创 2020-03-26 21:01:03 · 313 阅读 · 0 评论 -
JVM第二天-ClassFileFormat
我们知道,一个java文件被编译后,会变成另一个class文件。那你有没有观察过这个class文件里面长什么样子呢?我们来试一下,以以下java文件为例:package com.peng.jvm.c1_bytecode;public class T0100_ByteCode01 {}如果我们通过idea输出的class文件,会看到://// Source code recrea...原创 2020-03-25 20:10:06 · 483 阅读 · 0 评论