jvm分析

2 篇文章 0 订阅
2 篇文章 0 订阅

jvm分析:

一个java类在jvm中有三种形态:
1) source:源码形态  ->编译过程(javac)
2) class:字节码形态
3)runtime:运行时形态    加载到内存,内存存在形态

jvm中最核心的一个类就是ClassLoader,从分析源码发现该类在加载类的时候采用的双亲委派机制双亲委派:是JDK的一种安全机制,会检测类是否被加载过,只有没有加载过的才允许加载,父类能加载的就不给子类加载,同一时间、同一个类只允许一个线程加载到内存里一次
该类最核心方法:

protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
        synchronized (getClassLoadingLock(name)) {
            // First, check if the class has already been loaded
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                long t0 = System.nanoTime();
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }

                if (c == null) {
                    // If still not found, then invoke findClass in order
                    // to find the class.
                    long t1 = System.nanoTime();
                    c = findClass(name);

                    // this is the defining class loader; record the stats
                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                    sun.misc.PerfCounter.getFindClasses().increment();
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }
    }


比如:JDK内含java.util.List类  我们自定义一个 java.util.List类,这样的代码能通过编译,但是由于JDK为保护程序运行时安全的安全机制,
不允许我们运行。但是若果我们直接更换JDK内的List类编译后的二进制.class文件是可以执行的,黑客入侵可以通过这种方式。
文件的安全是由操作系统来保护的,JDK只是管理程序的运行时的安全,不关心文件是否被替换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值