
JVM
文章平均质量分 78
弓长木子_J
Those times when you get up early and you work hard
Those times when you stay up late and you work hard.
Those times when you don't feel like working you're too tired
and you don't want to push youself. But you don it anyway.
That is actually the dream.
This's the dream.
展开
-
Java中的偏向锁以及锁升级详解
我们知道JDK1.6后Synchronized进行了优化,有一个锁升级的过程,大致流程引用如下网图进行说明。1、锁升级流程图2、Hotspot对象头实现锁升级3、查看偏向锁相关JVM参数命令:java -XX:+PrintFlagsFinal -version | findstr BiasedLockingPS G:\IDEA_location\helloworld> java -XX:+PrintFlagsFinal -version | findstr BiasedLockingj原创 2022-04-21 09:09:47 · 3219 阅读 · 0 评论 -
JMM之happens-before原则
Java语言规范中有着针对指令重排序的happens-before规则。原创 2021-08-20 01:35:14 · 293 阅读 · 0 评论 -
JVM中的数据类型
在没有系统学习虚拟机相关知识时,可能不会接触到“虚拟机的数据类型”,这篇文章就是为了介绍和学习虚拟机的数据类型。 JVM的数据类型与Java程序语言中的数据类型相似,分为原始类型(Primitive Types)和引用类型(Reference Types)。与之对应,也存在有原始值(Primitive Values)和引用值(Reference Values)两种类型的数值可用于变量赋值、参数传递、方法返回和运算操作。一、原始类型(Primitive Types)1、数值类型(Numeric Typ原创 2022-04-17 17:37:29 · 426 阅读 · 0 评论 -
Java启动参数详解
Java启动参数的内容是JVM调优的必备知识,也是学习JVM的必经之路,这篇文章就用于记录相关知识。原创 2021-07-23 00:45:41 · 6311 阅读 · 0 评论 -
JDK命令行工具使用详解
这篇文章是基于sun提供的命令行工具使用及操作详解。随着时代的进步,市面上已经有许多支持工作的工具,例如阿里的Arthas(阿尔萨斯)就深受喜爱,实现了JVM自带的几乎所有诊断功能,这篇文章是介绍sun提供的一系列开源分析诊断工具。前面有写过各种JDK命令行工具的简介,详情可查看《JDK目录结构以及自带的工具解析》。一、JPS主要用于查看进程ID(PID)。C:\Program Files\Java\jdk1.8.0_152\bin>jps -helpusage: jps [-help]原创 2021-07-14 01:01:05 · 437 阅读 · 1 评论 -
idea64.exe.vmoptions文件详解
实际开发中常用IDEA的小伙伴,遇到内存问题时可能会修改idea64.exe.vmoptions文件中的部分参数,那么这篇文章就用于详细介绍该文件。一、文件简介idea64.exe.vmoptions和idea.exe.vmoptions两个文件都是IntelliJ IDEA的可执行文件的VM(虚拟机)配置文件,简单来说就是IDEA配置虚拟机参数的位置,不过前者对应的时64位IDEA,后者对应的是32D位的IDEA。注意:这跟项目中的虚拟机参数配置是有区别的,这两个文件针对的是IDEA环境,是IDE原创 2021-07-10 15:44:53 · 26564 阅读 · 7 评论 -
java.lang.reflect(Java反射包)
Java反射包是我们日常经常接触并且也是Java的基础内容,这篇文章就是为了方便学习记录Java反射包下相关的内容,巩固精进Java基础。一、简介java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作。二、Java反射包关系图三、Java反射包下类和接口简介我的目的是为了与字节码对象Class一起关联介绍(可以通过Class获取原创 2021-06-24 21:46:05 · 2725 阅读 · 1 评论 -
JDK目录结构以及自带的工具解析
学习Java的小伙伴都应该很熟悉JDK,当然这个熟悉也是有层度的,很多人往往只会用,知道装了JDK后就可以运行Java代码。但对于想深入学习Java的小伙伴来说这是不够的,这篇文章就作为我进阶JDK的一篇学习笔记。一、基础概念(1)JDK(Java Development ToolKit)Java开发工具包,包括JRE,Java工具(javac,javap,javadoc等)和Java基础类库(Java API包括rt.jar)等。(2)JRE(Java Runtime Environment)J原创 2021-04-18 00:24:59 · 950 阅读 · 0 评论 -
Java中的堆外内存和堆内内存
学习Java的小伙伴在学习Java虚拟机运行时数据区中学习过堆和直接内存,其实这里的堆和直接内存分别就对应着堆内内存和堆外内存,这篇文章就重点介绍堆外内存,Java程序是如何使用堆外内存的等一系列问题。原创 2021-05-28 21:02:00 · 5479 阅读 · 1 评论 -
Java引用详解
在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种,这4种引用强度依次逐渐减弱。一、强引用(Strongly Reference) 强引用是最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“Object obj = new Object()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾原创 2021-05-25 01:02:51 · 351 阅读 · 0 评论 -
通过Java类对象获取字段或方法相关信息
本文主要就是通过实例介绍如何通过Java类对象获取字段或方法相关信息,以及不同方式的对比,因为自己写了实例,想着就用个博文记录下吧!一、字段(1)getFields()获得某个类的所有的公共(public)的字段,包括父类中的字段。(2)getDeclaredFields()获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。二、方法(1)getMethods()获取自身能用所有的公共方法。1.类本身的public2.继承父类的pu原创 2021-04-28 00:57:39 · 2879 阅读 · 0 评论 -
Java对象的创建和结构(深入JVM理解)
初学Java时,也就知道new对象这种创建对象的方式,随着学习深入和经验积累,也知道了一些其他的创建对象的方式,但还是没有深入去理解学习Java虚拟机是如何创建对象的,这篇文化主要内容就是深入虚拟机去理解学习Java对象的创建。本文的内容都是以HotSpot虚拟机为主。一、背景:Java创建对象的方式有哪些?这个问题可能你会在面试的时候遇到,我就曾经遇到过,答案主要是四种创建对象的方式。(1)关键字new 最常见也是最简单的创建对象的方式,可以调用任意的构造函数。Demo demo = new原创 2021-04-23 17:27:15 · 502 阅读 · 0 评论 -
内存溢出(Out Of Memory)和内存泄漏(Memory Leak)
内存溢出和内存泄漏是程序开发中经常会遇到的问题!!!一、内存溢出(Out Of Memory,简称OOM)1.1 定义 指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。 1.2 产生原因:造成这种现象的原因通常有两种: 第一种是由于原创 2020-04-30 15:59:35 · 1738 阅读 · 0 评论 -
JVM指令手册
本文内容在网上随处可见,为方便我个人学习使用,遂也整理成为我自己的一份手册。为节约时间,本文并未整理成表格形式,观赏性较差,但不影响查阅。一、栈和局部变量操作(1)将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈ico翻译 2021-04-21 15:00:15 · 572 阅读 · 0 评论 -
Java类加载器
我们都知道Java程序的执行流程中,class字节码文件会类加载器加载,然后再被JVM执行引擎执行,这里的Java类加载器起到了至关重要的作用。原创 2021-04-21 13:35:09 · 168 阅读 · 0 评论 -
JVM中的疑问解答
JVM是Java的核心,为更好的学习这方面的内容,专门用这篇文章来记录JVM相关的疑问解答,即方便记录,同样也方便学习,有需要后期再将各种问题进行归档整理。原创 2021-04-20 21:35:17 · 124 阅读 · 0 评论 -
Java虚拟机的内存结构(详解与学习思考)
本来内存结构这篇文章我是没准备写的,但考虑到这个确实很重要,理解号Java内存结构 对Java的学习有极大的好处并且能一定的提升代码质量,所以还是开始了这篇文章,刚开始我不会在这里堆很多文字,重点还是说清楚主要架构,详细内容跟后续有时间再进行补充。...原创 2021-04-19 23:59:25 · 428 阅读 · 2 评论 -
Java虚拟机参数配置
虚拟机优化是我们面试常被问到的知识点,也是Java开发运用的重要内容,虽然现在实践中我也尚未接触到足够的内容,并没有在生产环境中进行虚拟机优化的经验,但学习这方面的知识是必不可少的,有备无患对吧!下面首先提供关于虚拟机参数配置的官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html有关虚拟机参数的配置上面的链接中应有尽有,值得学习。下面记录一些在我们Windows的cli中常用的命令解析,虽然现如今华为已经宣原创 2021-04-02 15:44:45 · 791 阅读 · 0 评论 -
Java常量池
长期以来,我们都知道“常量词”这个词,但是对这个概念未必有足够的理解,这篇文章就来从概念,从源码上深入理解下Java常量池。概念介绍: Java中的常量池通常指的是运行时常量池,是方法区中的一部分,一个JVM实例只有一个运行时常量池,各个线程共享该运行时常量池。 Java常量池中保存的是一份在编译期间就已经确认的数据(静态常量数据,在类加载前就已经被实例化了)。包含final常量的值(包括成员常量、局部常量和引用常量)、以及对象字面量的值。 在编译期间,每当给常量赋值它就会去检测常量池中是否存原创 2021-03-17 13:23:43 · 240 阅读 · 0 评论 -
Java中的“类名”.class、Class.forName()、“引用名”.getClass()
(1)类名.class:class是Java中每个类都有的一个静态属性class,类名.class是使 JVM 将使用类装载器将类装入内存(前提是类还没有装入内存),不做类的初始化工作,返回 Class 对象。(2)Class.forName():forName()方法是Class类中的静态方法,Class.forName()会装入类并做类的初始化,返回Class对象。(3)引用名.getClass():getClass()方法是Objdect类中的final native方法,引用名.getCl原创 2020-06-21 13:42:37 · 4922 阅读 · 3 评论 -
Java中Class.forName和ClassLoader.loadClass的比较
一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。 加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之原创 2020-06-21 12:55:19 · 256 阅读 · 0 评论 -
Java GC的疑问解答(面试点归纳)
可能面试中会问到有关GC的提问,那么这里就将我的收集和总结归纳成这篇博客!JVM的内存回收过程是怎样的?对象在Eden Space创建,当Eden Space满了的时候,gc就把所有在Eden Space中的对象扫描一次,把所有有效的对象复制到第一个Survivor Space,同时把无效的对象所占用的空间释放。当Eden Space再次变满了的时候,就启动移动程序把Eden Space中有效...原创 2020-05-06 13:50:51 · 874 阅读 · 0 评论 -
Java虚拟机类加载机制
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。一个类型从被加载到虚拟机...原创 2020-04-30 17:43:31 · 262 阅读 · 0 评论