首页 文章 精选 留言 我的

精选列表

搜索[虚拟化平台],共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总目录

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

Apache 虚拟主机配置案例

NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin admin@ free .com DocumentRoot "/usr/local/apache/htdocs" ServerName www. free .com ErrorLog "logs/www.free.com.error.log" CustomLog "logs/www.free.com.access.log" combined <Directory "/usr/local/apache/docs" > Options Indexes FollowSymLinks DirectoryIndex index.html index.php index.htm AllowOverride None Order allow,deny Allow from all < /Directory > < /VirtualHost > <VirtualHost *:80> ServerAdmin admin@ free .com DocumentRoot "/data/html/wordpress" ServerName blog. free .com #ServerAlias blog1.free.com ErrorLog "logs/blog.free.com.error.log" CustomLog "logs/blog.free.com.access.log" combined <Directory "/data/html/wordpress" > Options Indexes FollowSymLinks DirectoryIndex index.html index.php index.htm AllowOverride None Order allow,deny Allow from all < /Directory > < /VirtualHost > 本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1855311,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册