java字节码

Oracle诉Google一案认为,复制Java API的结构,序列和组织是侵犯版权的行为。 侵犯版权不仅是复制行为,而且还适用于拥有该作品副本的所有中间方。

那就是编写/编译任何JVM语言的人,以及在他们拥有的任何设备上都有JAR文件的人,包括旧摩托罗拉翻盖手机上的Java ME applet。 实际上,JVM的所有版本都非常普及,每个工业化国家的每个成年人都有可能在某个地方运行JVM。

而且每个非Sun / Oracle JAR文件中都嵌入了部分或全部Java API的副本,因为从技术上讲,为了调用API,必须在已编译的字节码中包含API的影子。

让我示范一下。

这是我编写的一个完全合法的Java程序,我拥有以下内容的版权:

public class HelloWorld {public static void main(String[] args) {int strlen = 0;for (int x = 0; x < args.length; x++) {strlen += args[x].length();}System.out.println("Hello, world, you passed in "+args.length+" arguments, "+"total size: "+strlen);}}

那里什么都没有侵权。 我通过OpenJDK Java编译器javac运行该程序,该程序生成一个HelloWorld.class文件。 根据业界通常使用Java和编译器的方式,产生的字节码是源代码的派生作品,我拥有源代码的版权。

因此,让我们看一下使用javap反汇编的结果字节码:

dpp@crown:~/proj/dpp-blog/images$ javap -c HelloWorld
Compiled from "HelloWorld.java"
public class HelloWorld {public HelloWorld();Code:0: aload_0       1: invokespecial #1                  // Method java/lang/Object."<init>":()V4: return        public static void main(java.lang.String[]);Code:0: iconst_0      1: istore_1      2: iconst_0      3: istore_2      4: iload_2       5: aload_0       6: arraylength   7: if_icmpge     2510: iload_1       11: aload_0       12: iload_2       13: aaload        14: invokevirtual #2                  // Method java/lang/String.length:()I17: iadd          18: istore_1      19: iinc          2, 122: goto          425: getstatic     #3                  // Field java/lang/System.out:Ljava/io/PrintStream;28: new           #4                  // class java/lang/StringBuilder31: dup           32: invokespecial #5                  // Method java/lang/StringBuilder."<init>":()V35: ldc           #6                  // String Hello, world, you passed in 37: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;40: aload_0       41: arraylength   42: invokevirtual #8                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;45: ldc           #9                  // String  arguments, 47: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;50: ldc           #10                 // String total size: 52: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;55: iload_1       56: invokevirtual #8                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;59: invokevirtual #11                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;62: invokevirtual #12                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V65: return
}

噢,我的……看,某些Java API完全插入了代码中。

实际上,JVM 要求调用站点(调用代码的位置)包括有关被调用的API的信息,以便JVM找出要调用的方法。 不仅是方法名称,而且还有传入的参数类型和预期的返回类型。

因此,每个已编译的JAR都包含嵌入其中的Java API的某些部分。 根据Oracle的决定,每个编译的JAR文件都侵犯了版权。

“但是,”您说,“ JAR文件并不包含所有有争议的API。”

首先,多少就足够了。 Oracle法院明确拒绝了有关API仅占Java基类整体工作的一小部分,并且百分比论据没有说服力的论点。

其次,对于像Maven Central这样的存储了成千上万个JAR文件的存储库,基本上所有Java API都被复制到这些JAR文件中存储的集合作品中。

该怎么办?

如果我要托管大量的JAR文件,我会打电话给我的律师试图弄清楚该怎么做。 是的,也许有一个引诱论据,因为Oracle分发了javac ,因此诱使我复制Java API。 但是,这仍然是对Oracle法院判决的技术性违反。

如果我是Apache Software Foundation或Free Software Foundation,我将在今天早上提出单方面请求以中止 Oracle的决定,因为这意味着我们一直在考虑的是可以在其上进行许可的软件我们的开放条款实际上包含Oracle版权代码,我们将不得不暂停所有与JVM相关的开源项目。

哦,我要指出的是,如果Oracle声称复制到JAR文件中的API不受版权保护,那么Google要做的就是从Maven Central中提取所有JAR文件,在所有这些API中找到所有Java API引用。 JAR文件,并使用该信息声明适用于Android的API。 最多大约要花10个工作日。

翻译自: https://www.javacodegeeks.com/2014/05/okay-everybody-who-touches-java-bytecode.html

java字节码

java字节码_好的,每个接触Java字节码的人相关推荐

  1. 优酷视频怎么转二维码_优酷视频转二维码

    有的人想将自己制作的视频分享出去,那么该如何将视频转换成二维码来分享呢?其实方法很简单,直接在视频界面中就能生成,这里和大家讲讲. 01. 登录自己的优酷帐号,然后点击右上角的上传按钮. 优酷视频怎么 ...

  2. java 优秀源码_想要快速进阶Java架构师?这份超强(长)学习计划单 请签收!...

    优秀工程师的成长之路就是一条不断打怪升级之路的"修仙之路"! 而Java程序员一向比别人更难,如果说大家都在修仙的话,java程序员简直神似"剑修",入行枯燥精 ...

  3. java mplayer 源码_师兄写的一个JAVA播放器的源代码

    MediaPlayer.java ---------------------------------------------------------------------------- //程序主文 ...

  4. apachejmeter_java源码_自定义编写jmeter的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...

  5. java是纯_让你真正了解Java(纯干货)

    "你学习一门技术的最佳时机是三年前,其次是现在."这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Ja ...

  6. java怎么运行_不要再问我Java程序是怎么执行的了!

    什么是Java虚拟机? 要弄明白Java程序的执行过程首先要了解一下Java虚拟机. 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构 ...

  7. 大华java面试经验_大华面试(Java 基础)

    7-17 大华一面(java 基础) 1. 讲一下 java 和其他语言的区别,说下 java 的平台无关性,如何做到一次编译,到处运行 关于java 的特性,可以从 java 的优点来说. java ...

  8. java 复杂网络分析_基于复杂网络的Java程序分析工具设计与实现思路浅谈

    基于复杂网络的Java程序分析工具设计与 实现思路浅谈 摘要:近年来,随着科学技术的进步,计算机技术发展速度的加快,使得软件价值也逐步提高,不管是软件系统的应用领域,还是其规模均获得了相应的扩大,且软 ...

  9. eclipse写java实现端口_使用eclipse(windows)在java中使用IPv6地址和端口号创建套接字...

    当我尝试使用IPv4地址创建套接字时,它很成功,但是当我尝试使用IPv6地址和端口号创建套接字时,它会引发异常: java.net.SocketException: Network is unreac ...

  10. java 字符串赋值_灵魂拷问:为什么 Java 字符串是不可变的?

    在逛 programcreek 的时候,发现了一些精妙绝伦的主题.比如说:为什么 Java 字符串是不可变的?像这类灵魂拷问的主题,非常值得深思.对于绝大多数的初级程序员来说,往往停留在"知 ...

最新文章

  1. AtCoder Beginner Contest 198 (A ~ F)题解
  2. (发现)问题才是推动创新的动力系列:两种类型硬币(均匀和非均匀)能否用第一次得正面朝上的概率推断“第一第二次依次获得正面反面情况”的概率?
  3. 独家 | 关于Spark NLP学习,你需要掌握的 LightPipeline(附代码链接)
  4. FFT频谱泄露和加窗 (一)
  5. 华为 mysql实例监控,华为云文档数据库服务DDS监控告警全新优化
  6. hadoop的同类技术_Hadoop 气数已尽:逃离复杂性,拥抱云计算
  7. 如果把线程当作一个人来对待,所有问题都瞬间明白了
  8. OpenCV提炼角点位置的实例(附完整代码)
  9. python中安装opencv一直说不是内部或外部文件_Window系统下Python如何安装OpenCV库
  10. Spring-jdbc:JdbcTemplate使用简介
  11. 08 事务到底是隔离的还是不隔离的?(转)
  12. 由“从按下回车到网页显示”粗谈网页优化
  13. FieldGroup绑定ItemDataSource
  14. 22. Magento 创建新闻模块(3)
  15. 海康SDK-javademo实现报错问题解决
  16. Java对接ChinaPay提现(公私钥方式)
  17. 只需要5秒就能克隆出你的声音
  18. matlab复数的使用,关于MATLAB在复数方面的应用
  19. 织梦CMS插件-支持dedeCMS各大主题
  20. 造成笔记本电池损耗的主要原因

热门文章

  1. 【2018.4.21】模拟赛之二-ssl2403 蜡烛【贪心】
  2. 【2018.3.24】模拟赛之一-ssl2545 奇数【水题】
  3. 4、mybatis通过配置类Configuration 实现初始化
  4. 写一个http服务器
  5. art-template入门(三)之语法
  6. C++描述杭电OJ 2021.发工资 ||
  7. ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
  8. Servlet使用适配器模式进行增删改查案例(IDeptService.java)
  9. 基本数据类型、包装类、String三者之间的相互转换
  10. 2017蓝桥杯省赛---java---A---1(迷宫)