![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
JVM
yaoshengting
这个作者很懒,什么都没留下…
展开
-
虚拟机字节码指令表
常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null null值入栈。 0x02 iconst_m1 -1(int)值入栈。 0x03 iconst_0 ...转载 2020-07-19 16:43:13 · 319 阅读 · 0 评论 -
从代码示例理解Class类文件的结构
Class类文件结构 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储地内容几乎全部都是程序运行地必要数据,没有空隙存在。当遇到需要占用8位字节以上空间地数据项时,则会按照高位在前地方式分割成若干个8位字节进行存储。 根据Java虚拟机规范,Class文件格式采用一种类似于C语言结构体地伪结构体来存储数据,这种伪结构体中只有两种数据类型:无符号数和表无符号...原创 2020-07-12 08:51:33 · 597 阅读 · 0 评论 -
JVM方法调用指令与方法调用时的解析、分派
一、方法调用指令invokevirtual指令用于调用对象的实例方法,根据对象的实际类型进行分派(虚方法分派),这也是Java语言中最常见的方法分派方式。invokeinterface指令用于调用接口方法,它会在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。invokespecial指令用于调用一些需要特殊处理的实例方法,包括实例初始化方法、私有方法和父类方法。invokestatic指令用于调用类方法(static方法)invokedynamic指令(原创 2020-07-07 16:19:33 · 429 阅读 · 0 评论 -
自旋锁与自适应自旋及JDK中使用自旋的例子
互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能带来了很大的压力。 同时,虚拟机的开发团队也注意到在许多应用上,共享数据的锁定状态只会持续很短的一段时间,为了这段时间去挂起和恢复线程并不值得。 如果物理机器有一个以上的处理器,能让两个或以上的线程同时并行执行,我们就可以让后面请求锁的那个线程“稍等一下”,但不放弃处理器的...原创 2020-02-20 19:15:42 · 882 阅读 · 0 评论 -
GC的可达性算法、java对象的四种引用及对象逃逸
在JDK1.2之前,Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。 但是我们希望描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是非常紧张,则可抛弃这些对象。很多系统的缓存功能都符合这样的应用场景,在内存不吃紧或者说为了提高运行效率的情况下,...原创 2020-02-20 18:31:22 · 591 阅读 · 0 评论 -
使用本地的JDK自带的jvisualvm远程监控运行在阿里云服务器上的Tomcat
准备阿里云服务器一台:公网IP:47.97.*.* 内网IP:10.81.*.*一、修改远程阿里云ECS服务器上的tomcat的配置1.进入远程(Linux)系统中的jdk指定目录复制jmxremote.password.template文件重命名为jmxremote.password[root@iZbp13pwlxqwiu1xxb6szsZ management]# pwd...原创 2019-08-26 18:34:46 · 604 阅读 · 0 评论 -
HotSpot中Serial/Serial Old与Parallel Scavenge/Parallel Old内存分配策略区别
按照《深入理解Java虚拟机》中测试内存分配与回收策略中的代码进行了测试,JDK8官方文档中JVM相关的文档地址https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/测试代码如下,使用的是JDK8,默认的垃圾收集器是Parallel Scavenge+Parallel Oldpublic class Te...原创 2020-02-09 19:24:34 · 388 阅读 · 0 评论 -
JDK8中java命令相关选项JVM参数、GC参数
地址链接https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmljava命令的参数Standard Options这些是JVM的所有实现所支持的最常用选项。主要参数 -jarfilename Executes a program encapsulated in a JAR file...原创 2020-02-09 12:18:58 · 1520 阅读 · 0 评论 -
Arthas------Java 线上问题定位处理利器
Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线...原创 2020-02-08 17:50:44 · 993 阅读 · 0 评论 -
JVM监控和故障处理工具
JDK监控和故障处理工具 名称 主要用途 jps JVM Process Status Tool ,显示指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics Monitoring Tool ,用于收集HotSpot虚拟机各方面的运行数据 jinfo Configuration Info forJava,显示虚拟机配置信息 ...原创 2020-02-08 13:27:20 · 766 阅读 · 0 评论 -
JVM之OutOfMemory异常
JVM之OutOfMemory异常原创 2020-02-07 16:21:59 · 213 阅读 · 0 评论 -
JVM内存模型之方法区
方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 使用HotSpot虚拟机的用户,更愿意把方法区称为“永久代PermGen”,本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集至方法区,或者说用永久代来实现方法区而已。这样HotSpot的垃圾收集器可以像管理Java堆...原创 2020-02-07 11:43:43 · 495 阅读 · 0 评论 -
JVM类加载器
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。类与类加载器 对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。因此比较两个类是否“相等...原创 2020-02-06 23:39:21 · 126 阅读 · 0 评论 -
JVM类加载的过程
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking),这7个阶段的发生顺序如图:加载-...原创 2020-02-06 21:35:36 · 206 阅读 · 0 评论 -
JVM面试题
JVM 由哪些部分组成JVM 的结构基本上由 4 部分组成: 类加载器,在 JVM 启动时或者类运行时将需要的 class 加载到 JVM 中 执行引擎,执行引擎的任务是负责执行 class 文件中包含的字节码指令,相当于实际机器上的 CPU 内存区,将内存划分成若干个区以模拟实际机器上的存储、记录和调度功能模块,如实际机器上的各种功能的寄存器或者 PC 指针的记录器...原创 2020-02-05 21:14:20 · 511 阅读 · 0 评论