jvm高级特性与最佳实践
文章平均质量分 85
淡墨@~无痕
这个作者很懒,什么都没留下…
展开
-
java虚拟机详解篇十四(java堆内存)
Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java堆是垃圾收集器管理的内存区域。一个JVM实例只存在一个堆内存,所有的对象实例和数组都应该在运行时分配到堆上。堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。原创 2022-08-24 12:58:00 · 1101 阅读 · 0 评论 -
java虚拟机详解篇十三(本地方法栈)
java的虚拟机栈用于管理java方法的调用,而本地方法栈用于管理本地方法的调用。(本地方法栈线程私有)本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别是本地方法栈的使用语言,方式和数据结构并没有强制的规定,可以根据需要自由实现。有的java虚拟机直接把本地方法栈和虚拟机栈合二为一(Hotspot JVM),与虚拟机栈一样,本地方法栈也会在栈深度溢出或者栈扩展失败时分别抛出和异常。原创 2022-08-24 12:50:53 · 1039 阅读 · 0 评论 -
java虚拟机详解篇十二(方法调用和方法的绑定机制)
在jvm中将符号引用为调用方法的直接引用与方法的绑定机制有关,如果方法在在编译期就确定了调用的具体版本,这个版本在运行的时候是不可变的,这样的方法被称之为非虚方法。静态方法,私有方法,final方法,实例构造器,父类方法都是非虚方法。其它的方法被称之为虚方法。1、invokestatic:调用静态方法,解析阶段确定唯一方法版本2、 invokespecial:调用方法、私有及父类方法,解析阶段确定唯一方法版本3、invokevirtual:调用所有虚方法。原创 2022-08-24 00:31:59 · 193 阅读 · 0 评论 -
java虚拟机详解篇十一(java虚拟机栈)
当一个方法开始执行后,只有两种方式退出这个方法。第一种方式是执行引擎遇到任意一个方法返回的字节码指令(return指令),这时候可能会有返回值传递给上层的方法调用者(调用当前方法的方法称为调用者或者主调方法),方法是否有返回值以及返回值的类型将根据遇到何种方法返回指令来决定,这种退出方法的方式称为“正常调用完成”(Normal Method Invocation Completion)。另外一种退出方式是在方法执行的过程中遇到了异常,并且这个异常没有在方法体内得到妥善处理。原创 2022-08-24 00:28:53 · 833 阅读 · 1 评论 -
java虚拟机详解十(程序计数器)
CPU在运行的过程中不断做任务切换,多线程是在一个时间段内只会执行其中的某一个线程的方法,这样必然会有中断和异常,为了准确记录各个线程正在执行的当前字节码指令地址,那就必须每一个线程配备一个PC寄存器,这样线程可以独立计算,不会互相干扰。由于CPU时间片限制,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某一个线程的字节码指令。:当程序运行时,CPU需要不断切换其他的线程,当CPU切换回原来的线程时,CPU就知道从哪里开始执行。原创 2022-08-24 00:20:22 · 290 阅读 · 0 评论 -
java虚拟机详解篇九(代码编译追踪)
执行偏移地址为14的指令,iload_3指令把存放在第三个局部变量槽中的300入栈到操作数栈,这时操作数栈的值为两个整形数字300,下一条指令imul将操作数栈顶的两个元素出栈,做整形乘法,然后把结果入栈,与iadd指令的执行过程类似。执行偏移地址为2的指令,istore_1指令的作用是操作数栈顶的整形值出栈并存放到第一个局部变量槽中,后续4条指令(一直到偏移地址为11的指令为止)都是做的一样的事情,也就是在对应的代码中把变量a,b,c赋值100,200,300。原创 2022-08-23 15:33:43 · 226 阅读 · 0 评论 -
java虚拟机详解篇八(运行时数据区概述)
Java虚拟机的运行时数据区域。原创 2022-08-23 15:17:02 · 307 阅读 · 0 评论 -
java虚拟机详解篇七(虚拟机线程)
java虚拟机定义了若干程序运行时用到的数据区,其中有一些会随虚拟机的启动而创建,随虚拟机退出而销毁,另外一些则是与线程一一对应,这些与线程对应的数据区域则是随线程的开始和结束而创建和销毁。1、线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行。在Hotspot JVM里,每一个线程都与操作系统的本地线程直接映射。2、当一个java线程准备好执行后,此时一个操作系统的本地线程也同时创建,java线程执行终止后,本地线程也会回收。原创 2022-08-23 14:51:08 · 569 阅读 · 0 评论 -
java虚拟机详解篇六(类的加载机制)
类的加载机制一共有四种,分别是全盘负责机制,父类委托机制,缓存机制,还有最重要的双亲委派机制。原创 2022-08-17 23:55:44 · 232 阅读 · 0 评论 -
java虚拟机详解篇五(类的加载器)
在java程序开发的过程中,类的加载基本上都是由上述三类加载器加载完成,在必要的时候可以自己定义类加载器。1、执行代码前自动验证数字签名2、根据用户提供的密码解密代码,从而实现代码混淆器来避免反编译*.class文件3、根据用户需求来动态地加载类4、根据应用需求把其他数据以字节码的形式加载到应用中。1、隔离加载类2、修改类加载的方式3、扩展加载源4、防止源码泄露。...原创 2022-08-17 17:26:24 · 449 阅读 · 0 评论 -
java虚拟机详解篇四(类的生命周期)
一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking),如下图所示:需要注意的是,,类型的加载过程必须按照这种顺序按部就班地开始(开始。...原创 2022-08-17 16:29:28 · 363 阅读 · 0 评论 -
java虚拟机详解篇二(类字节码详解)
class文件本质上是一个以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在class文件中。jvm根据其特定的规则解析该二进制数据,从而得到相关信息。Class文件采用一种伪结构来存储数据,它有两种类型:无符号数和表。...原创 2022-08-16 21:14:39 · 277 阅读 · 0 评论 -
java虚拟机详解篇一(基础)
Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释编译为对应平台上的机器指令执行每一条java指令。java虚拟机规范中都有详细的定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。其在代码运行的过程中居最重要的地位。.........原创 2022-08-16 16:10:20 · 1029 阅读 · 0 评论 -
java面经总结篇一(JVM篇)
JVM 的主要组成部分JVM的主要组成部分有以下几种:类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Exe原创 2022-04-23 23:59:57 · 310 阅读 · 0 评论