zoukankan      html  css  js  c++  java
  • 字节码文件与ClassLoader

    • 使用javac命令编译.java源代码文件生成.class字节码文件
    • 使用javap -c -v XXX.class可以查看字节码文件内容
    • ClassLoader
      • 将class字节码文件加载到JVM虚拟机中
      • 搜索class字节码文件的范围是由classpath中配置的一个或多个路径来决定的,如果执行时真的找不到则会抛出ClassNotFound异常。
      • 文件验证器检查每一个class字节码文件的过程
        • 字节码文件结构
        • 检查class字节码文件开头的几个数字,即魔数,一般就是0xCAFEBABE,说明是一个Java类。
        • 检查class字节码文件接下来的两个数,即主副版本号,比如50.0代表1.6。
        • 验证Class编译得对不对,比如常量池、访问标识、字段、方法等。
      • 分级的ClassLoader
        • Bootstrap ClassLoader
        • Extension ClassLoader
        • App ClassLoader
        • App ClassLoader必须一级级请示上级是否已经加载了该class(上级加载过就不用再重复加载了),因为有一些String、ArrayList这样的重要类,由核心ClassLoader去加载,避免黑客搞一些同名的会进行攻击的class被App ClassLoader加载进来被运行
    • JVM虚拟机
      • 方法区
        • Java函数栈
          • 每个线程会有一个
          • 包含多个栈帧,即依次多个函数调用
          • 栈帧
            • 一旦调用一个新方法,就会形成一个新的栈帧
            • 每个栈帧中都有一个函数变量区和一个操作数栈
            • 局部变量区
            • 操作数栈
              • 先进先出
              • 举例来说,通常会根据指令(如a+b),将当前指令需要的变量(a、b)从局部变量区放到操作数栈中,然后再执行加法操作指令
      • 根据类创建出的对象被放在
      • 每个线程在运行时,如果需要用到某个类的方法,会根据地址(?)去向类要并执行方法对应的一条条指令
      • 垃圾回收
        • 清理者
        • JVM虚拟机可以使用多少内存,是在启动虚拟机时通过参数由码农指定的
        • 如果不清理,很快就会用完内存,系统崩溃,Out Of Memory
        • 通过可达性分析来确定需要清理哪些对象
          • 从GC Roots对象节点出发,四处搜索被GC Roots直接引用的对象,再一层层去找引用链条上的对象,如果不在这些链条上,那么就很有可能被清理。
  • 相关阅读:
    从排序开始(二) 希尔排序
    Linux之入侵痕迹清理总结
    MySQL使用痕迹清理~/.mysql_history
    WINDOWS之入侵痕迹清理总结
    SQL注入攻击技巧总结
    PHP iconv函数字符串转码导致截断问题
    PHP中is_numeric函数十六进制绕过0day
    反射型xss绕过IE xss filter
    Dedecms最新版本存储型XSS
    网站程序+服务器提权思路总结
  • 原文地址:https://www.cnblogs.com/wyp1988/p/11935121.html
Copyright © 2011-2022 走看看