自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 为什么需要GC、回收机制、什么是垃圾

什么是垃圾垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。什么是垃圾(Garbage)呢?垃

2020-12-09 19:53:55 431 1

原创 String的基本特性、内存分配、拼接操作、intern()的使用

String的基本特性String:字符串,使用一对""引起来表示。String sl =“hello world”;//字面量的定 义方式String s2 = new String(“hello”);String声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char[]value用于存储字符串数据。jdk

2020-11-28 21:07:50 191

原创 执行引擎的工作过程、Java代码编译和执行的过程、解释器、JIT编译器

执行引擎概述执行引擎是Java虛拟机核心的组成部分之一。“虚拟机”是-一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些

2020-11-24 21:52:25 237

原创 创建对象的方式、创建对象的步骤、内存布局之对象头,实例数据、对象访问定位

对象的实例化创建对象的方式new : new Xxx();​ 变形1:Xxx的静态方法​ 变形2:XxxBuilder/XxxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone() :不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反

2020-11-22 17:01:32 181

原创 栈、堆、方法区的交互关系、方法区的内部结构、演进细节、垃圾回收

栈、堆、方法区的交互关系方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对 于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一 样,是各个线程共享的内存区域。方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区–样 都可以

2020-11-19 21:24:58 240

原创 逃逸分析之栈上分配、同步省略、标量替换

堆是分配对象存储的唯一选择吗?堆是分配对象存储的唯一选择吗?在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述:随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。在Java虛拟机中,对象是在Java堆中分配内存的,这是一个普遍的常识。但是,有一种特殊情况,那就是如果经过逃逸分析(Escape Analysis)后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配

2020-11-15 22:14:01 319

原创 GC策略的触发条件、堆空间分代思想、内存分配策略、为对象分配内存:TLAB、堆空间的参数设置

Minor GC、Major GC与Full GCJVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代。|针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为:新生代收集(Minor GC/Young GC):只是新生代的垃圾收集老年代收集(Major GC/Old GC):只是老年代的垃圾收集。目前,只

2020-10-20 22:37:51 281 1

原创 堆的内存细分、设置堆内存大小、对象分配过程

堆的核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。堆内存的大小是可以调节的《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被市委连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应

2020-10-19 21:57:59 1822

原创 本地方法接口、本地方法栈

本地方法接口什么是本地方法?简单地讲,一个Native Method就是一个Java调用Java代码的接口,一个Native Method是这样一个Java方法,该方法的实现由非Java语言实现,比如,C,这个特征并非Java特有,很多其他的编程语言都有这一机制,比如在C++中,你可以用extern “C”告知C++编译器去调用一个C的函数在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非Java语言在外面实现的。本地接口的作用是

2020-10-18 15:41:53 200

原创 jvm中详讲方法的调用

方法的调用在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制有关。静态链接当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接动态链接如果被调用的方法在编译期无法确定下来,也就是说,只能够在程序运行期间调用方法的符号引用转换为直接引用,由于这种引用转换过程具备动态性,因此也就被称之为动态链接。对应的方法的绑定机制为:早期绑定和晚期绑定,绑定是一个字段、方法或者类在符号引用被

2020-10-14 21:15:05 102

原创 虚拟机栈中的局部变量表、操作数栈、动态链接、方法返回地址、栈顶缓存技术

局部变量表局部变量表也被称之为局部变量数组或本地变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各种基本数据类型,对象引用,以及returnAddress类型由于局部变量表是建立在线程的栈上,是线程的私有数据,因为不存在数据安全问题。局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maximum local variables数据项中,在方法运行期间是不会改变局部变量表的大小的。方法嵌套调用的次数由栈的大小决定

2020-10-13 21:29:03 705

原创 虚拟机栈的生命周期、作用、特点、存储单位

栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放在哪儿。虚拟机栈的基本内容Java虚拟机是什么?Java虚拟机,早期也叫Java栈,每个线程子创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的Java方法调用。是线程私有的。生命周期生命周期和线程一致。作用主管Java程序的运行,它保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回。变量的分类:按

2020-10-12 22:04:16 718

原创 程序计数器

PC Register介绍JVM中的程序计数器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会,JVM中的PC寄存器是对物理PC寄存器 的一种抽象模拟。PC Register作用PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一

2020-10-10 16:20:49 321

原创 运行时数据区结构图及涉及到的线程

运行时数据区结构图Java虚拟机定义了若干种程序运行期间会使用的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁,另外一些则是与线程一一对应的,这些与线程对应的数据区域随着线程开始和结束而创建和销毁。橙色的为单独线程私有的,灰色的为多个线程共享的每个线程:独立包括程序计数器、栈、本地栈线程间共享:堆、堆外内存(永久代或元空间、代码缓冲)关于线程间共享的说明每个JVM只有一个Runtime实例,即为运行时环境,相当于内存结构的中间的哪个框框,运行时环境。线程是一一个

2020-09-22 20:54:17 73

原创 类加载器子系统作用,类的加载过程,类加载器的分类,双亲委派机制

类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,Class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则有Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)类的加载过程加载(loading)1.通过一个类的全限定名获取定义此类的二进制字节流

2020-09-21 21:08:52 131

原创 JVM的整体结构及发展历程

JVM与Java体系结构java是跨平台的语言,jvm是跨语言的平台java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行,每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。特点:一次编译,到处运行自动内存管理自动垃圾回收功能JVM的位置java代码的执行流程JVM的整体结构JVM的架构模型java的编译器是基于栈的指令集架构和基于寄存器架构相比:指令集小,指令多,可

2020-09-19 11:56:23 142

XmanagerPowerSuite-7.0.0001.exe

XmanagerPowerSuite-7.0.0001.exe

2022-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除