![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
普通网友
这个作者很懒,什么都没留下…
展开
-
面试何惧调优?耗时47天吃透Github上星标98.7k的“性能优化方案优解“,成功入职美团!
随着互联网的发展,高可靠、高并发以及降本增效,已成为各大公司面临的现实挑战,性能优化需求愈发迫切,大到分布式系统,小到代码块的算法优化,都已经成为你日常工作中必须要面对的事情。对于开发者而言,性能优化也从加分项变为一个热门技能,缺乏相关知识将很难在面试或工作中脱颖而出。性能优化作为大厂面试必考内容,很多应聘者反映说面试官的一些问题会让其陷入模棱两可的境地,不知如何作答,比如很多人就搞不懂缓冲与缓存的区别。这种问题的答案,只能靠体系化的整理,依靠零零散散的知识是行不通的。你需要具备触类旁通的能力,才能原创 2020-10-23 17:19:14 · 1437 阅读 · 16 评论 -
限量!阿里甩出878页性能优化笔记!Github已标星72k
前言从我们迈入软件行业开始,性能的重要性就一再被强调。在读书时,我们学习了大量的计算机专业课程,花了大量的时间去讨论怎么让我们计算机系统获得比较好的性能。而当我们去找工作时,大部分的公司在笔试和面试时都会考一考算法,问一问算法复杂度。能写出比别的竞争者时间复杂度更低、性能更好的程序是应征者获得一份工作的关键。目前存在性能问题的系统,十之八九是由某一系统瓶颈导致的。只要找到该性能瓶颈,分析瓶颈的形成原因,对症下药,使用合理的方法解决系统瓶颈,就能从根本上提升性能。那么我们该如何才能做好性能调优?性原创 2020-10-21 17:27:39 · 2220 阅读 · 22 评论 -
synchronized关键字这样理解你是不是就会懂了?
说说自己对于synchronized关键字的了解synchronized关键字用于解决多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。值得注意的是,在Java早期,JDK1.6之前,synchronized属于重量级锁,效率低下。原因在于:监视器锁【monitor】依赖于底层操作系统的Mutex Lock实现,Java的线程是映射到操作系统的原生线程之上的。如果要挂起或唤醒一个线程,都需要操作系统帮忙完成,而操作系统原创 2020-09-21 14:19:38 · 383 阅读 · 0 评论 -
深入理解Java虚拟机——类加载机制详解
类加载的时机加载阶段合适开始,《Java虚拟机规范》并没有强制约束,交由虚拟机自己实现。而初始化阶段,严格规定有且只有以下六种情况,如果类型没有进行过初始化,必须对类进行初始化:遇到以下字节码指令: new:实例化对象的时候 getstatic和putstatic,读取或设置一个类型的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)。 invokestatic:调用一个类型的静态方法的时候。 使用java.lang.reflect包对类型进行反射调用的时原创 2020-09-16 14:47:00 · 383 阅读 · 0 评论 -
JVM四种引用类型的特点你真的知道吗?
强引用在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之一。软引用软引用需要用 SoftReference 类来实现,如果一个对象只具有软引用,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。软引用可以用来实现内存敏感的高速缓存。软引用可以和一个引用队列联合原创 2020-09-16 14:46:56 · 548 阅读 · 0 评论 -
JVM内存区域详解——深入浅出JVM
JVM内存区域JDK1.8前后,JVM内存区域的变化一、JDK1.8前二、JDK1.8之后推荐观看:传送门线程共享一、堆Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。为什么说几乎呢?答:Java世界中“几乎”所有的对象都在堆中分配,但是,随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些.原创 2020-09-16 14:46:54 · 431 阅读 · 0 评论 -
13张图解就能让女朋友彻底了解Java中的内存模型,快上车!
前言 了解Java中的对象、变量等存放的内存区域十分重要 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢 目录1. 内存模型 & 分区Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区在运行时数据区里,会根据用途进行划分: Java虚拟机栈(栈区) 本地方法栈 Java堆(堆区) 方法区 程序计数器 下面,我将详细介绍每个内存模型分区2. J...原创 2020-09-01 12:57:30 · 388 阅读 · 0 评论 -
一文教你学会 Java常用业务代码——(IO篇)
本篇文章对日常开发中常用的Java IO场景进行整理,涉及功能有:判断目录/文件、创建目录/文件、获取文件属性、通过文件头判断文件是否为Excel、字节流/字符流读取文件、字节流/字符流写入文件、对象序列化反序列化、图片增加水印。FileJava中File类提供了一系列方法让开发人员对于目录文件进行操作,通常是对目录文件增删: 判断File是文件还是目录 //===判断File是文件还是目录,目录则递归遍历 public static void isDir(File fi原创 2020-05-30 14:29:14 · 724 阅读 · 0 评论 -
java基础|java中的二进制运算以使用场景
本文知识点 java中用二进制使用场景 java中声明二进制数据 java中拼接二进制数据 二进制的使用场景做标识用二进制就是只有0和1这两个数.这和我们现实很多场景都类似, 如男/女,是/否,是否已读等.那么对一个主体的描述, 我们可以有一个二进制串来标识一系列的flag.(小刀已改名为凑心啦,至于原因嘛, 因为现在在做一个小程序, 估计不久后会和大家见面)如有一个心,同时还有一个描述的二进制串 1101. 第一个1代表男,第二个1代表矮.第三个0 代表.原创 2020-05-29 16:34:08 · 687 阅读 · 0 评论 -
JVM | GC收集器概念篇
本文知识点 STW(Stop the world)的概念 安全点的概念 GCRoots的概念 Remember Set (记忆集) 本篇内容以概念为主,先了解概念,知道有哪些名词,东西, 再实战看里面的东西去加深理解GC总述java在运行时,生成的对象都在堆里存放着,有些对象的生命周期很短,只几行代码运行完就没用了.没用了之后不能放任他在堆里, 要进行回收,把空间空出来,给后面的对象.我们常用收拾屋子来比喻jvm清理堆.这里, 我们不仅仅有个房子, 我们还原创 2020-05-29 16:31:25 · 335 阅读 · 0 评论 -
JVM | 运行时常量池和字符串常量池及intern()
本文知识点这一块的知识点,一直都是最为混乱的,网上很多博客有的都自相矛盾,因此,这一块需要深入学习,本文以JDK11为基础,尽量参考官方文档 静态常量池 运行时常量池及字符串的引用 各种String语句变量的地址 参考文档:https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-5.html#jvms-5.1静态常量池静态常量池也常常称做为class常量池,是每个.class文件都有的,如测试代码如下:原创 2020-05-29 16:29:52 · 687 阅读 · 0 评论 -
JVM | 使用HSDB探秘运行时数据区
本文知识点 HSDB的使用 HSDB查看栈信息 HSDB查看堆信息 Class对象,static对象,Klass的关系 需要注意, 本文所用JDK环境为JDK11,网上有很多博客是基于JDK1.7, 两者的方法区的实现不一样,所以有些数据展示也会不同. HSDB的使用HSDB全称是HotSpotDebugger, HotSpot虚拟机的调试工具,在使用的时候,需要程序处在暂停的状态,可以直接使用Idea的debug工具. 使用HSDB可以看到堆栈里面相关原创 2020-05-29 16:28:18 · 1033 阅读 · 0 评论 -
JVM | 运行时数据区的JVM规范
本文知识点 JVM虚拟机制定的规范 方法区,永久代,元空间的区别 总述在这一块的学习时, 我们容易陷入一个误区,就是一上来就直接搜索运行时数据区, 网上有些文章对虚拟机规范和HOTSPOT实现没有区分开,导致有时候大家看的两篇文章解释尽不一样. 自己也容易糊涂. 所以本篇特地将两个拆开讲. 且尽量以官方文档为准我们可以把jvm规范理解成接口. 就是要这些东西, 然后不同的虚拟机厂商有不同的实现方案. 如方法区,hotspot 用了1.7及以前用了永久代, 1.8及以后用了元数据区原创 2020-05-29 16:26:44 · 415 阅读 · 0 评论 -
简单就能了解JVM | 类的初始化及新建过程
本文知识点 类的状态变化 <clinit> 方法 实例对象的创建 类的状态变化类的初始化主要经历加载->链接(验证,准备,解析)->初始化这些阶段,与JVM中相对应的状态如下图所示instanceKlass.hppallocated: 已分配,但尚未链接loaded: 已加载,并插入到JVM内部类层次体系中,但尚未链接linked: 已链接,但尚未初始化being_initialized: 初始化中fully_initia原创 2020-05-29 16:23:20 · 388 阅读 · 0 评论 -
简单就能了解JVM | OOP-Klass 二分模型
本文知识点 OOP和klass的概念 OOP和Klass源码 HSDB的使用 OOP和klass的概念OOPS: 即普通对象指针,用来描述对象实例信息Klass: Java类的C++对等体,用来描述Java类总体上是多个OOP和一个Klass是对应的. 相当于一个类可以有多个实例A a = new A() ; A a1 = new A();a,a1 分别对应着不同的OOP, 对应着同一个KlassOOP和Klass源码OOP中有很多模块,其中..原创 2020-05-29 16:18:30 · 623 阅读 · 0 评论