JVM虚拟机
独家技术
这个作者很懒,什么都没留下…
展开
-
java 字节码分析工具 jclasslib 包含idea安装jclasslib插件
jclasslib git地址:https://github.com/ingokegel/jclasslib1. idea 安装使用打开idea 中的settings > plugins 搜索 jclasslib 插件 进行安装 重启生效重启后点击view> 选择show bytecode with jclasslib可以看到字节码视图了使用win 工具 jclasslib下载地址 github上有...原创 2021-03-24 10:35:53 · 355 阅读 · 0 评论 -
阿里巴巴JVM调优工具arthas
下载下载全量包从Maven仓库下载最新版本,点击下载:从Github Releases页下载https://github.com/alibaba/arthas/releases用as.sh启动解压后,在文件夹里有as.sh,直接用./as.sh的方式启动:./as.sh打印帮助信息:./as.sh -h用arthas-boot启动或者在解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动:java -jar arth原创 2021-03-22 17:28:22 · 1826 阅读 · 0 评论 -
jvisualvm安装Visual GC插件
给jdk自带的jvisualvm安装Visual GC插件,遇到We're sorry the java.net site has closed(我们很抱歉java.net网站已经关闭)1、找到新的更新地址visualvm新访问地址:https://visualvm.github.io/index.html进入“Plugins”,找到对应自己JDK版本的更新地址2、进入jvisualvm的插件管理"工具" - "插件"在"设置"中修改url地址为刚才我们在github上找到的转载 2021-03-22 13:54:32 · 151 阅读 · 0 评论 -
JVM指令码 手册
将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量1压入栈fconst_0 将float类型常量原创 2021-03-19 16:53:09 · 93 阅读 · 0 评论 -
Java Class类文件结构
代码编译的结果:从本地机器码转变为字节码一、概述 越来越多的程序语言选择了与【操作系统】和【机器指令集】无关的、平台中立的格式作为程序【编译】后的【存储格式】 "与平台无关"的理想最终实现在操作系统的【应用层】上: Sun公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字...原创 2019-02-24 15:50:59 · 122 阅读 · 0 评论 -
Java虚拟机性能监控与故障处理工具
一、JDK命令行工具 1、 jps:虚拟机进程状况工具 输出JVM中运行的进程状态信息。 语法格式如下: jps [options] [hostid] 如果不指定hostid就默认为当前...原创 2019-02-23 10:01:07 · 150 阅读 · 0 评论 -
Java虚拟机内存分配与回收策略
Java中的【自动内存管理】可以归结为【自动化】的解决2个问题: 1、给对象分配内存 2、回收分配给对象的内存对象的内存分配,往大方向说,就是在【堆】上分配: 1、对象主要分配在【新生代】的【Eden区域】上 2、如果启动了【本地线程分配缓冲TLAB】,将按【线程优先】在【TLAB】上分配一、对象优先在Eden区分配 1、...原创 2019-02-23 09:45:15 · 216 阅读 · 0 评论 -
HotSpot虚拟机上垃圾收集算法实现
在HotSpot虚拟机上实现这些算法时,必须对算法的执行效率有严格的考量,才能保证虚拟机高效运行。一、枚举根节点(Stop the World停顿,准确式GC,OOPMap) 1、从可达性分析算法中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在【全局性引用(例如常量或类静态属性)】与【执行上下文(例如栈帧中的局部变量表)】中 2、现在...原创 2019-02-22 22:21:45 · 161 阅读 · 0 评论 -
谈谈垃圾收集算法
一、标记-清除(Mark-Sweep)①.最基础的收集算法,后续的垃圾收集算法都是对其不足进行改造得到的②. 算法分为"标记"和"清除"两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收被标记的对象不足: 1. 效率问题: 标记和清除两个过程的效率都不高 2. 空间问题: 标记清除后会产生大量的不连续的内存碎片 内存碎片太多可能会导致程序运行期间需...原创 2019-02-22 21:27:12 · 94 阅读 · 0 评论 -
对象已死吗?看完这个你就懂了
【Java堆】里面存放着Java世界几乎所有的【对象实例】。【垃圾收集器】在对堆进行回收前,第一件事就是:确定这些对象之中哪些还“存活”着,哪些"死去"(即不可能再被任何途径使用的对象)。一、判断对象是否存活(垃圾回收算法) 1. 引用计数算法(Reference Counting)【对象添加引用计数器,引用就+1,引用失效就-1,值为0就是不再被使用对象】 什么是引用...原创 2019-02-22 15:40:04 · 259 阅读 · 0 评论 -
JVM内存管理机制
Java与C++之间有一堵由内存动态分配与垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 —— 《深入理解Java虚拟机:JVM高级特性与最佳实践》 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途。以及创建和销毁的时间。有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束...原创 2019-02-21 21:35:13 · 402 阅读 · 0 评论 -
Java虚拟机之垃圾收集器
一、关于Java垃圾回收的简介 (1)Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭; 栈中的【栈帧】随着方法的进入和退出而有条不紊的执行着入栈和出栈操作。 (2) 二、垃圾回收的一种方法:引用计数算法 我们在面试的时候,当问到如何判断对象是否存活,我们也许...转载 2019-02-02 00:33:56 · 111 阅读 · 0 评论 -
Java虚拟机OOM之虚拟机栈和本地方法栈溢出
一、在Java虚拟机规范中,对【虚拟机栈】这个内存区域规定了两种异常状况: (1)如果线程请求的【栈深度】大于虚拟机所允许的深度,将抛出StackOverflowError异常; (2)如果虚拟机栈可以动态扩展(当前大部分的 Java 虚拟机都可动态扩展,只不过 Java 虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够的内存时会抛出OutOfMemory...转载 2019-01-25 15:44:02 · 400 阅读 · 0 评论 -
Java虚拟机对象访问以及如何使用对象的引用
对象访问在Java语言中几乎是无法不在的,但即使是最简单的访问,也会涉及Java栈、Java堆、方法区这三个最重要内存区域之间的关联关系,如下面这句代码:Object obj = new Object(); 我们知道在Java栈中保存的是对象的引用,Java堆中才是具体new出来的对象实体,根据具体类型以及虚拟机实现的对象内存布局的不同,这块内存的长度是不固定的。 另外,在Ja...原创 2019-01-25 15:04:22 · 817 阅读 · 1 评论 -
Java虚拟机内存区域划分详解
背景 JVM是Java开发的必备技能,JVM相当于Java的操作系统。 JVM(java virtual machine)即Java虚拟机,是运行java class文件的程序。 Java代码经过Java编译器编译,会编译成class文件, 是一种与平台无关的代码格式。 class文件按照JVM规范,包括java代码运行所需要的【元数据】和【代码】等内容。 JVM加载...原创 2019-02-01 19:56:33 · 526 阅读 · 0 评论