首页 文章 精选 留言 我的

精选列表

搜索[虚拟线程],共10000篇文章
优秀的个人博客,低调大师

Java 虚拟机诊断利器

作者 | 小白一只 【Arthas 官方社区正在举行征文活动,参加即有奖品拿~点击投稿】 背景 最近学习Java字节码过程中遇到了反射,有段代码是这样的: package com.example.classstudy; import java.lang.reflect.Method; /** * @author TY */ public class ReflectionTest { private static int count = 0; public static void foo() { new Exception("test#" + (count++)).printStackTrace(); } public static void main(String[] args) throws Exception { Class<?> clz = Class.forName("com.example.classstudy.ReflectionTest"); Method method = clz.getMethod("foo"); for (int i = 0; i < 20; i++) { method.invoke(null); } } } 就是一段简单的反射调用 foo 方法,执行 20 次,然后看执行结果: 可以看到在 15 次调用 foo 方法后,第 16 次调用 foo 方法是走的 GeneratedMethodAccessor1 来调用的。我嘞个擦,怎么回事,调着调着就不一样了,于是跟代码,跟到了下面这个类: 其中这句代码就是对反射调用的次数做了控制 if (++this.numInvocations > ReflectionFactory.inflationThreshold() && !ReflectUtil.isVMAnonymousClass( this.method.getDeclaringClass())) { MethodAccessorImpl var3 = (MethodAccessorImpl) (new MethodAccessorGenerator()) .generateMethod(this.method.getDeclaringClass(), this.method.getName(), this.method.getParameterTypes(), this.method.getReturnType(), this.method.getExceptionTypes(), this.method.getModifiers()); this.parent.setDelegate(var3); } this.numInvocations 的默认值是 0,而 ReflectionFactory.inflationThreshold() 默认是 15,当大于 15 的时候会通过 ASM 技术动态生成 GeneratedMethodAccessor1 类来调用 invoke 方法,但是,因为是动态生成的,我们怎么才能看到这个类实际长什么样子呢? Arthas 这个时候,就可以用上阿里的 arthas(阿尔萨斯)了。 首先下载 arthas: curl-Ohttps://alibaba.github.io/arthas/arthas-boot.jar 然后启动 arthas: java-jararthas-boot.jar 启动之后界面长这个样子: 其中什么 23012, 28436 等是当前环境中现有的 java 进程,然后需要连接到哪个进程就输前面的编号(1234 啥的),输了之后回车。那么我首先改写一下最开始的那个程序,让他不退出: package com.example.classstudy; import java.lang.reflect.Method; /** * @author TY */ public class ReflectionTest { private static int count = 0; public static void foo() { new Exception("test#" + (count++)).printStackTrace(); } public static void main(String[] args) throws Exception { Class<?> clz = Class.forName("com.example.classstudy.ReflectionTest"); Method method = clz.getMethod("foo"); for (int i = 0; i < 20; i++) { method.invoke(null); } System.in.read(); } } 重新启动程序之后,查看 arthas 界面: 可以看到 32480 正是我们运行的程序,输入编号 2 去连接到该进程: 然后就可以将动态生成的类 dump 下来: dumpsun.reflect.GeneratedMethodAccessor1 可以看到字节码被 dump 下来了,找到该文件用 javap 来查看: javap-c-v-p-lGeneratedMethodAccessor1.class 没有问题,可以查看到,然后剩下的就是人肉翻译字节码啦。。。 本篇关于Arthas的使用其实很少,我只是因为学到这个地方简单的用了下,但是已经感受到了 Arthas 的强大之处,它甚至还支持 web 界面。。。 相当厉害! Arthas 征文活动火热进行中 Arthas 官方正在举行征文活动,如果你有: 使用 Arthas 排查过的问题 对 Arthas 进行源码解读 对 Arthas 提出建议 不限,其它与 Arthas 有关的内容 欢迎参加征文活动,还有奖品拿哦~点击投稿 “阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

优秀的个人博客,低调大师

Java虚拟机运行流程

DOS:磁盘命令系统。 有空格的dos不管你是不是一体的默认为是一体 要说明他是一体的话要加双引号 dos中快速打开dos中的命令啊? dos:要想写入一个断命令就执行你的命令你就要告诉dos你要执行命令的夹子在那了。 告诉他了你就可以快速执行短命令 不管你要怎样在dos启动你的程序都要进入根目录下。 path:(又称环境变量)我们如果想在dos写一个快捷命令让他执行我们只能将他的路径告诉环境变量path, path:环境变量就是寄存了一些路径.地址数据,我们把路径告诉了path,path知道去哪里去找。 你配置好了path:我们把路径告诉了path,path就知道往这个路径下去搜索。 path是Java的吗,path是系统的,专为dos提供快捷命名配置你把路径告诉path今后你只要输入短的名称,他就会帮你在path搜索,搜索的到就运行搜索不到就报错。好处就是不用写那么长的路径名了。 配置完path要以封号结尾(;),path;可以帮你快速执行命令。 启动文件是exe文件启动的。java的环境变量中的启动和运行文件在bin目录。 Java运行时java.exe, 编译时javac。exe 多个路径使用分割符(;)隔开即可,配置完毕后要重启才可以读取新配置的数据。 写命令运行 和配置path(好处就是节省输入命令路径)方便。 path:就是在就是在dos写一个快捷命令如何写一个短命令让他快去执行,那就要把你的文件命令告诉path, path,不是Java的他是系统的命令。 运行的是class文件 java -version查询java版本 配置环境变量了计算机只会按照你配置的路径去寻找(计算机是死东西只会运算) classpath 是类文件的类需要在配置不需要要就不用配置,配置了他就会指定位置搜索。要想本地搜索 . ; JAVA_HOME; jdk总目录

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册