
jvm
文章平均质量分 76
TDdate
这个作者很懒,什么都没留下…
展开
-
jvm之垃圾回收器
1.GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以有不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC为不同的类型。按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一个时间段内只允许一个cpu用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。与串行回收相反,并行收集可以运行多个cpu同时执行垃圾回收,因此提升了应用的吞吐量,不过并行回收与串行.原创 2021-08-30 19:27:27 · 98 阅读 · 0 评论 -
jvm之垃圾回收
1.什么是垃圾垃圾是指在运行程序没有任何指针指向的对象,这个对象就需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。2.为什么需要GC对高级语言来说,一个基本认知如果不进行垃圾回收,内存迟早都会被消耗完,因为不断地分配内存空间而不进行回收,就好像不停地生产生活垃圾而从来不打扫一样,除了释放没有的对象,垃圾回收也可以清除内存里的记录碎片。碎片整理将会所占用堆内存移到堆内存的一端,以原创 2021-08-22 10:02:49 · 171 阅读 · 0 评论 -
jvm之String Table
1.String的基本特性String:字符串,使用一对" "引起表示,String声明为final的,不可被继承,实现了Serializable接口,表示支持字符串被序列化,在jdk8及以前内部定义了final char[] value用于存储字符串数据。jdk9时改为byte[]。String代表不可变的字符序列,简称不可变性,当字符串重新赋值时,需要重写指定内存区域赋值,不能使用有value进行赋值,当对现有的字符串进行操作时,也需要重新指定内存赋值,不能使用原有的value进行赋值。当调用S原创 2021-08-21 09:15:29 · 176 阅读 · 0 评论 -
jvm之执行引擎
1.执行引擎的概述执行引擎是java虚拟机核心的组成部分之一,“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行的能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件支持的指令集格式。如果想要让一个java程序运行起来,执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以,简单来说,JVM的执行引擎充当了将高级语言翻译为机器语原创 2021-08-17 12:06:12 · 126 阅读 · 0 评论 -
jvm之对象(实例化、内存布局、访问定位)和直接内存
1.创建对象的方式①new。②Class的newInstance()。③Contructor的newInstance(Xxx)。④使用clone()。⑤使用反序列化。⑥Object第三方Objenesis。2.创建对象的步骤①判断对象对应的类是否被加载、链接、初始化。②为对象分配内存,如果内存规整,使用指针碰撞,如果内存不规整,虚拟机需要维护一个列表,空间列表分配③处理并非安全问题,采用CAS配上失败重试保证更新的原子性,每个线程预先分配一块TLAB。④初始化分配到空间,所有属性设置原创 2021-08-16 10:17:11 · 96 阅读 · 0 评论 -
jvm之方法区
1.《Java虚拟机规范》中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但是一些简单的实现可能不会选择去进行垃圾收集或者进行压缩“。但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区与Java堆一样,是各个线程共享内存区域,方法区在JVM启动的时候被创建,并且它实际的物理内存空间中和Java堆区一样都可以是不连续的,方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展,方法区的大小决原创 2021-08-15 17:41:06 · 141 阅读 · 0 评论 -
jvm之堆(详解)
1.堆的核心概述:一个jvm实例只存在一个堆内存,堆也是Java内存管理的核心区域,java堆区在jvm启动的时候即被创建,其空间大小也就被确定了,是jvm管理的最大一个内存空间,堆内存的大小是可以调节的,在《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的,所有的线程共享Java堆,在这里还可以划分线程私有的缓存区(TLAB)。数组和对象可能永远不会在存储在栈上,因为栈帧中保存引用,这个引用指向对象在堆中的位置。在方法执行结束后,堆中的对象不会马上被移除,仅仅原创 2021-08-10 21:33:04 · 734 阅读 · 0 评论 -
jvm之虚拟机栈
1.出现的背景:由于平台性的设计,java的指令都是根据栈设计的,不同平台cpu架构不同,所以不能设计为基于寄存器的。2.优点:是跨平台、指令集小、编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。3.栈是运行时的单位,而堆是存储单位。即栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,,即数据怎么放、放在哪里。4.java虚拟机栈:早期也加Java栈。每个线程在创建是都会创建一个虚拟机栈,器内部保存一个个的栈帧,对应着一次次的java方法调用。原创 2021-08-08 14:22:41 · 117 阅读 · 0 评论 -
jvm之双亲委派机制
1.java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用是才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,java虚拟机采用的是双亲委派模式,即把请求交给父类处理,它是一种任务委派模式。2.双亲委派机制的原理:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就**成功返原创 2021-08-02 20:18:13 · 129 阅读 · 0 评论 -
jvm之类加载过程
1.类加载子系统作用:① 类加载器子系统负责从文件系统或网络中加载class文件,class文件开头有特定的件标识。② classLoader只负责class文件的加载,至于是否可以运行,则可以运行,则由Excution Engin决定。③ 加载类的信息存放在一块程为方法区的内存空间,除了类信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息总是class文件常量池部分内存映射)。2.类加载器ClassLoader角色① class file时.原创 2021-08-02 18:33:21 · 73 阅读 · 0 评论 -
jvm之类的加载器分类
1.jvm支持两种类型的类加载器,分别为引导类加载器(Bootstrap 也叫启动类加载器)和自定义加载器,其实从概念上讲,自定义类加载器一般由开发人员自定的一类加载器,但是虚拟机规范却没有这这么定义,而是将所有派生于抽象类ClassLoader的类加载器都规划分为自定义加载器,其中包括了扩展类加载器、应用程序加载器(系统类加载器,AppClassLoader)h和用户自定义加载类器。2.加载器分类① 引导类加载器(Bootstrap 也叫启动类加载器):这个类加载使用c/c++语言实现的,嵌套在J原创 2021-08-02 19:39:13 · 228 阅读 · 0 评论