zoukankan      html  css  js  c++  java
  • Java底层知识:JVM

    一、JVM如何加载.class文件

    • ClassLoader:依据特定格式,加载class文件到内存
    • Execution Engine:对命令进行解析
    • Native Interface:融合不同开发语言的原生库为Java所用
    • Runtime Data Area:JVM内存空间结构模型

    二、反射的概念

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象的功能称为Java语言的反射机制

    反射的例子

    package javabasic;
    
    public class Robot {
        private String name;
        public void sayHi(String helloSentence) {
            System.out.println(helloSentence+" "+name);
        }
        private String throwHello(String tag) {
            return "Hello"+tag;
        }
    }
    package javabasic;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class reflect {
        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
            Class rc = Class.forName("javabasic.Robot");
            Robot r = (Robot)rc.newInstance();
            System.out.println("Class name is "+rc.getName());
            Method getHello = rc.getDeclaredMethod("throwHello", String.class);
            getHello.setAccessible(true);
            Object str = getHello.invoke(r, "Bob");
            System.out.println("getHello result is "+str);
            Method sayHi = rc.getMethod("sayHi", String.class);
            sayHi.invoke(r, "Welcome");
            Field name = rc.getDeclaredField("name");
            name.setAccessible(true);
            name.set(r, "Alice");
            sayHi.invoke(r, "Welcome");
        }
    }

    三、ClassLoader的种类

    BootStrapClassLoader:加载Java核心API

    ExtClassLoader:加载扩展API

    AppClassLoader:加载classpath下的class

    自定义ClassLoader

    四、类加载器的双亲委派机制

     

    五、类的加载方式

    隐式加载:new

    显示加载:loadClass,forname

     六、Java内存模型

     

     Java内存模型

    线程独占部分:程序计数器、本地方法栈、虚拟机栈

    线程共享部分:MetaSpace、堆

    Java堆:对象实例的分配区域;GC管理的主要区域

  • 相关阅读:
    【其他】parallels Desktop解决无法压缩硬盘的问题
    【读书笔记】《互联网企业安全高级指南》1-5
    【漏洞复现】SMBLoris windows拒绝服务漏洞
    【编程开发】macOS下配置scapy环境
    C#异常处理经验(原则与方法)
    EntityFramework linq 多条件查询,不定条件查询
    C#制作、打包、签名、发布Activex全过程
    ZPL语言完成条形码的打印
    Linux环境下MySql安装和常见问题的解决
    lrzsz——一款好用的文件互传工具
  • 原文地址:https://www.cnblogs.com/-2016/p/12493384.html
Copyright © 2011-2022 走看看