java 使用本机代理_Java与本机代理–他们所做的强大功能

java 使用本机代理

在安装代理之前应了解的内容及其对代码的影响

在构建可伸缩的服务器端应用程序时,我们花费大量时间思考如何在生产中监视,操作和更新代码。 已经开发出一种新的工具来帮助Java和Scala开发人员做到这一点。 它们中的许多都是建立在最强大的方式之一上的,即外部代码可以在运行时与JVM集成的Java代理代理商

代理是OS本机或Java库(我们将在下面描述它们之间的差异),JVM提供的这些功能是普通应用程序代码所不具备的。 为了了解它们的基本原理,让我们看一下我们使用的依赖它们的一些工具–

  • 探查器使用Java代理修改目标框架的代码,以注入收集性能指标的新代码。 这包括独立或托管服务,例如NewRelic或YourKit。
  • Play框架 V1使用Java代理在运行时启用类的热交换。
  • JRebel通过构建一种可以在运行时提供平滑的类热交换而无需重新启动JVM的技术,将其带入了一个新的高度。
  • Takipi,我们利用JVM提供给本机代理的低级功能来显示导致错误的实际源代码和变量值。

代理商可以做什么?

正如我上面提到的,有两种代理-Java和本机。 两者以几乎相同的方式(使用特殊的JVM启动参数)加载到JVM中时,它们的构建方式和用途几乎完全不同。

让我们看一下两个–

Java代理

Java

Java代理是.jar文件,它们定义了一个特殊的premain静态函数,在调用应用程序的主函数之前,JVM将先调用该静态函数。 神奇的部分来自Instrumentation对象,该对象由主机JVM作为参数传递给该函数。 通过保留该对象,代理程序的代码(否则,其行为就像由根类加载器加载的任何Java代码一样)可以做一些真正强大的事情。

public static void premain(String agentArgs, Instrumentation inst) {
myInst = inst; //grab a reference to the inst object for use later
}

他们做什么 。 赋予代理程序最强大的功能是在运行时类(字段结构是不可变的)上动态重写目标类方法内容的能力。 此过程称为字节码检测,使代理能够在代码运行时实质上重写方法的内容。

一些示例包括添加对特定方法的调用以概要分析性能(例如,结束时间–开始时间)或记录参数值(例如,传递给Servlet的URL)。 另一个示例将是重新加载类的新版本,而不用像JRebel那样重新启动JVM。

怎么做的 。 对于代理修改代码或已加载的类,它实际上触发了JVM重新加载类的过程,其中该类的字节码被替换为新版本。 这就要求代理能够为JVM提供可验证的新字节码(即符合JVM规范)。 不幸的是,在运行时生成正确的字节码并不是一件容易的事–有很多要求和边缘情况。 对于这种代理,通常使用一个库来读取和写入字节码,从而使他们能够将现有类的字节码加载到类似DOM的结构中,通过添加性能分析调用之类的东西对其进行修改,然后将DOM保存回原始字节码。 ASM对此很受欢迎。 如此流行,以至于Sun的一些内部代码实际上已使用它来解析Java中的字节码。

本地代理

本机

本地代理人是完全不同的野兽。 如果您认为Java代理可以让您做一些很酷的事情,那么请坚持一下,因为本机代理在不同的层次上运行。 本机代理不是用Java编写的,而是大多数用C ++编写的,并且不受常规Java代码操作的规则和限制的约束。 不仅如此,它们还具有称为JVM工具接口(JVMTI)的极其强大的功能集。

他们做什么 。 jvmti.h公开的这组API实质上使JVM动态加载的C ++库能够获得对JVM实时工作的极高可见性。 这涵盖了广泛的领域,包括GC,锁定,代码操作,同步,线程管理,编译调试等等。

JVM TI旨在使JVM尽可能透明,同时仍保持设计灵活性,以允许JVM供应商提供不同的基础实现。 这套API非常广泛,实际上包含了数百个JVM回调和函数。 您可以使用它们来执行Java代理无法完成的极其强大的功能,例如编写您自己的调试器或构建底层的实时错误分析工具( Takipi就是这样)。

例如,这是JVMTI提供给代理的回调,因此,只要在JVM内部的任何地方引发异常,代理都会收到引发异常的字节码位置,所有者线程,异常对象和如果/在哪里被捕获。 确实功能强大。

void JNICALL ExceptionCallback(jvmtiEnv *jvmti,
JNIEnv *jni, jthread thread, jmethodID method,
jlocation location, jobject exception,
jmethodID catch_method, jlocation catch_location)

缺点 。 如果我描述的所有内容听起来都像桃子一样,您可以问为什么不是所有代理都写成本地代理? 没有什么理由可以知道,因此这里是(没有特定的顺序)。

复杂性 。 首先是JVMTI API非常复杂,带有许多小的移动轮子。在大多数情况下,如果您不连接需要非常低级功能的代理,则可以使用Java代理API很好。更直接,可以帮助您更快地完成工作。

可移植性 。 由于本机代理是作为本机库(.so / .dll)编写和编译的,因此需要在要支持的任何数量的操作系统上进行编译和测试。 如果您查看Windows,OSX和Linux带来的不同风格,则可以转化为大量工作。 将其与Java代理(由JVM作为Java代码执行,因此在设计上具有固有的可移植性)进行比较。

字节码操作。 由于本机代理程序通常是用C ++编写的,这意味着它们不能直接使用经过尝试的真正的Java字节码操作库(例如ASM),而不必使用JNI返回JVM,这确实会带来一些乐趣。

稳定性 。 JVM提供了强有力的保护措施,以防止代码执行可能导致愤怒的OS终止进程的事情。 在正常情况下,内存访问冲突会导致SIGSEV并使程序崩溃,请给我们包装一个不错的NullPointerException。 由于本机代理程序在JVM的相同级别上运行(与Java代理程序由其执行代码)相同,因此它们所犯的任何错误都可能会终止JVM。

希望这有助于突出两种之间的某些区别。 了解什么是代理以及它们是如何构建的,这是很好的,即使您从未最终编写过代理,也可能依靠其中的一个或多个来为您的应用程序提供动力。

参考: Java与本地代理– Takipi博客上我们JCG合作伙伴 Iris Shoor 的强大功能 。

翻译自: https://www.javacodegeeks.com/2014/01/java-vs-native-agents-the-powerful-things-they-do.html

java 使用本机代理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】广东开放大学 企业会计准则应用实务形成性考核 (41)

选择题 题目:当非货币性资产交换同时满足“交换具有商业实质”和“换入资产或换出资产的公允价值能够可靠地计量”两个条件时,应当以公允价值和应支付的相关税费作为换入资产的成本,公允价值与换出资产账面价值的差额计入当期损益。 答案&…

在任何无法理解的情况下,请编写脚本

脚本编写是使您的应用程序在运行时就可以根据客户需求进行调整的最流行的方法之一。 与往常一样,此方法不仅带来好处,例如,在灵活性和可管理性之间存在众所周知的折衷方案。 本文不是从理论上讨论优缺点的文章之一,而是从实践上展…

【渝粤教育】广东开放大学 公共关系实务 形成性考核 (37)

选择题 题目: 请指出以下哪些言论具有公共关系意识( ) 选择一项或多项: 答案:看左侧 题目: 公共关系传播媒介,从其物质形式看有( ) 选择一项或多项: 答案&a…

【渝粤教育】广东开放大学 地基与基础 形成性考核 (27)

选择题 题目:土的三相比例指标包括:土粒比重、含水量、密度、孔隙比、孔隙率和饱和度,其中为实测指标。 答案:看左侧 题目:条形均布荷载中心线下,附加应力随深度减小,其衰减速度与基础的宽度b有…

【渝粤教育】广东开放大学 社会调查与方法 形成性考核 (35)

选择题 题目:社会调查的本质是( ) 题目:从所研究的总体屮,按照一定的方式选取一部分个体进行调查,并将在这部分个体中所得到的调查结果推广到总体中去,这种调查是( )…

下载anaconda时出现“Please make sure you are connected to the internet”警告

如题,在anaconda下载过程中下载VScode时出现下图的警告。 百度翻译: 顺着图中指定文件路径,找到vscode_inst.py.log文件(注:有些人ProgramData文件夹可能找不到,打开任意文件夹,点击查看&…

【渝粤教育】广东开放大学 Linux操作系统 形成性考核 (55)

选择题 题目: 以下哪个不属于操作系统? 答案:看左侧 题目: 以下描述正确的是? 答案:看左侧 题目: 使用gcc编译后的目标文件一般以什么名称结尾? 答案:看左侧 题目&#x…

多个公证员提高网络吞吐量

您是否需要非常高吞吐量的Corda网络? 网络的吞吐量是否稳定? 您是否已经从其他领域挤出了所有可能的表现? 如果您对这些问题的回答是“是”,那么我可能会为您提供一些有用的信息。 我列出了这些问题,以减少您过早优化C…

初识FPGA(搬运)

原文链接1原文链接2 fpga简介 FPGA(Field-Programmable Gate Array), 即现场可编程门阵列,它是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑器件)、CPL(复杂可…

【渝粤教育】广东开放大学 会展营销 形成性考核 (56)

选择题 题目:以下哪一个选项不属于市场定位的内容? 答案:看左侧 题目:以下哪一个选项不是会展营销调研的程序? 答案:看左侧 题目:以下哪一个选项不是市场定位的原则? 答案&#xff1…

【渝粤教育】广东开放大学 劳动人事争议处理法 形成性考核 (51)

选择题 题目: 下列哪一选项属于劳动人事争议?( ) 选择一项: 答案:看左侧 题目: 仲裁委员会的主任由( )担任。 选择一项: 答案:看左侧 题目…

【渝粤教育】广东开放大学 土地力学与地基基础 形成性考核 (32)

选择题 题目:7,地下科能(流入)与排泄(浦出)条件以及土中水的渗透速度都与土的有关 题目:8在非均质土层中,土的坚向自重应力沿深度的分布规律是( )。 题目:10某粘性土的I,≤0,该土的物理状态为( )。 题目:1地震时产生的…

蓝桥杯小白系列之汇编点亮led灯

蓝桥杯小白系列之汇编点亮led灯 1、源代码 2、逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起。 (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会自动响起,故在程序前提前加上如下代码,让蜂鸣器不响: mov P2,#0A0H mov P0,#000H 参照…

带有Oracle Digital Assistant和Fn Project的会话式UI。 第二部分

在上一篇文章中,我使用Oracle Digital Assistant为FlexDeploy实现了一个对话式UI。 今天,我将用Fn Flow丰富它,以便聊天机器人接受发行名称而不是ID来创建快照。 完成后,对话听起来会更加自然: … “您可以建立快照吗…

小白系列之51单片机的入门速成法

51单片机的入门速成法 01-经典51内核资源全览浓缩图 02-重要外设特殊功能寄存器概览 03-程序开发流程与设计要点 04-三大外设的开发与可重用代码 05-应用程序设计入门一例通 01-经典51内核资源全览浓缩图 <1> 四组8位并行I/O端口&#xff1a; P0端口&#xff1a;PC门&a…

【渝粤教育】广东开放大学 工程经济 形成性考核

选择题 题目&#xff1a; 单选 下列是年金现值系数表示符号的是&#xff08;&#xff09; 答案&#xff1a;看左侧 题目&#xff1a; 单选 某施工企业现在对外投资200万元&#xff0c;5年后一次性收回本金和利息&#xff0c;若年基准收益率为8%&#xff0c;则总计可以收回资…

Hibernate事实:集成测试策略

我喜欢集成测试&#xff0c;这是检查Hibernate生成哪些幕后花絮SQL查询的好方法。 但是集成测试需要运行的数据库服务器&#xff0c;这是您必须要做的第一选择。 1.使用类似生产的本地数据库服务器进行集成测试 对于生产环境&#xff0c;我始终喜欢使用增量DDL脚本&#xff0c…

【渝粤教育】广东开放大学 插画与漫画 形成性考核 (27)

选择题 题目&#xff1a;先从整体开始绘制的一般顺序是 题目&#xff1a;正常头身比角色转化为Q版角色&#xff0c;基本可以用几个词说完&#xff0c;那就是 题目&#xff1a;影响衣服皱褶的的因素有 题目&#xff1a;关于女性漫画人物正面面部特征&#xff0c;以下说法正确的是…

蓝桥杯基础模块1:LED跑马灯

一、模块题目 二、原理简述 1、74HC138:三八译码器(3个输入,8个输出) 2、74HC573:锁存器(20个引脚,D1D8是数据输入端,Q1Q8是数据输出端&#

【渝粤教育】广东开放大学 文学概论 形成性考核 (31)

选择题 题目&#xff1a;对创作个性与文学风格这两个概念的关系理解正确的是&#xff08; &#xff09; 题目&#xff1a;审美意象总是以表达哲理和观念作为存在的目的和最高审美理想&#xff08; &#xff09; 题目&#xff1a;西方典型论发展的三个阶段是&#xff08; &#…