![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 90
Java的jvm
鸭鸭老板
偏执只会左右你的思考
展开
-
Java --- JVM之垃圾回收相关知识概念
3、在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用( Phantom Reference)4种,这4种引用强度依次逐渐减弱。1、软引用是用来描述一些还有用,但非必需的对象。4、对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为null,就是可以当做垃圾被收集了,当然具体回收时机还是要看垃圾收集策略。原创 2023-11-21 22:37:18 · 645 阅读 · 0 评论 -
Java --- JVM之垃圾回收相关算法
这里的清除并不是置空,而是把需要清除的对象地址保存在空闲的地址列表里。下次需要新对象需要加载时,判断垃圾的位置空间是否足够,如果够,就存放。原创 2023-11-19 22:17:07 · 402 阅读 · 0 评论 -
Java --- JVM之垃圾回收概述
1、垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。2、垃圾收集机制是Java语言的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断演进中。垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。原创 2023-11-15 17:57:42 · 461 阅读 · 0 评论 -
Java --- JVM之StringTable
总结:在jdk6中,如果串池中有,就返回已有的串池中的对象的地址,如果没有,就是将这个对象复制一份,放入串池,并返回这个对象的地址。从jdk7起,如果串池中有,就返回已有的串池中的对象的地址,如果没有,就是将这个对象的引用地址复制一份,放入串池,并返回串池中的引用地址。③、在jdk6中的StringTable的是固定的,就是1009的长度,所以如果常量池中的字符串过多就会导致效率下降很快。4、如果拼接的结果调用intern()方法,则主动将常量池中还没有的字符串对象放入池中,并返回此对象地址。原创 2023-11-15 16:26:41 · 181 阅读 · 0 评论 -
Java --- JVM的执行引擎
1、执行引擎是Java虚拟机核心的组成部分之一。2、“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。原创 2023-11-12 23:50:36 · 732 阅读 · 0 评论 -
Java --- 直接内存
②、Java的NIO库允许Java程序使用直接内存,用于数据缓冲区。2、由于直接内存在Java堆外,因此它的大小不会直接受限于-Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。使用NIO时,操作系统划出的直接缓存区可以被java代码直接访问,只有一份,NIO适合对大文件的读写操作。1、不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。2、直接内存是在Java堆外的,直接向系统申请的内存区间。原创 2023-11-12 18:14:27 · 285 阅读 · 0 评论 -
Java --- JVM对象的实例化内存布局与访问地位
虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。如果内存不是规整的,已使用的内存和未使用的内存相互交错,那么虚拟机将采用的是空闲列表法来为对象分配内存。意思是虚拟机维护了一个列表,记录上哪些内存块是可用的,再分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的内容。将对象的所属类(即类的元数据信息)、对象的HashCode和对象的GC信息、锁信息等数据存在对象的对象头中。原创 2022-11-01 12:11:14 · 204 阅读 · 2 评论 -
Java --- JVM方法区
4、方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致万法区溢出,虚拟机同样会抛出内存溢出错误: java.lang. outOfMemoryError:PermGen space或者java.lang. outofMemoryError: Metaspace 比如:加载大量的第三方jar包,Tomcat部署的工程太多,大量动态的生产反射类,都会造成。3、而到了JDK 8,终于完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Metaspace)来代替。原创 2022-10-17 18:49:38 · 406 阅读 · 1 评论 -
Java --- JVM的堆内容
5、《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。4、所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区 (Thread Local Allocation Buffer,TLAB)。堆内存的大小是可以调节的。6、数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置。7、在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。1、一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。原创 2022-10-09 12:45:42 · 454 阅读 · 0 评论 -
Java --- JVM本地方法接口与本地方法栈
例如:类iava.lang.Thread的 setPriority()方法是用Java实现的,但是它实现调用的是该类里的本地方法setPriority0()。通过使用本地方法,我们得以用Java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的。②、如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个OutofMemoryError异常。2、本地方法栈,也是线程私有的。原创 2022-10-08 08:00:00 · 338 阅读 · 0 评论 -
Java --- JVM之运行时数据区与线程
内存是非常重要的系统资源[是硬盘和cPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。Java虚拟机定义了若千种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与我程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰色的为单独线程私有的,红色的为多个线程共享的。原创 2022-09-28 08:00:00 · 168 阅读 · 0 评论 -
Java --- JVM虚拟机栈
由于跨平台性的设计,Java的指令都是根据栈设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。原创 2022-09-30 08:15:00 · 222 阅读 · 0 评论 -
Java --- JVM程序计数器(PC寄存器)
JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到奇存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为pc计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的ec寄存器是对物理PC寄存器的一种抽象模拟。原创 2022-09-29 20:00:00 · 2051 阅读 · 0 评论 -
Java ---JVM之类加载子系统
④、解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。1、class file 存在于本地硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载到JVM当中来根据这个文件实例化出n个一模一样的实例。3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。原创 2022-09-24 08:00:00 · 774 阅读 · 0 评论 -
Java --- JVM概述
1、java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为jvm字节码。2、不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。3、Java虚拟机与 Java语言并没有必然的联系,它只与特定的二进制文件格式—Class文件格式所关联,class文件中包含了Java虚拟机指。原创 2022-09-18 08:00:00 · 473 阅读 · 0 评论