JVM

博客围绕JVM展开,介绍了其平台无关性、一次编译到处运行的特点,还提及GC、面向对象等语言特性。探讨了JVM不直接将源码解析成机器码的原因,包括准备工作和兼容性,最后阐述了JVM加载.class文件的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 平台无关性 一次编译 到处运行
  • GC
  • 语言特性
  • 面向对象
  • 类库
  • 异常处理

Compile Once, Run Anywhere
java底层代码执行

javac 
javap -c 

为什么JVM不直接将源码解析成机器码去执行

  • 准备工作:每次执行都需要各种检查
  • 兼容性:也可以将别的语言解析成字节码

JVM如何加载.class文件
Java虚拟机
在这里插入图片描述
在这里插入图片描述

package com.java.reflect;

public class Robot {
    private String name;
    private String throwHello(String tag) {
        return "Hello " + tag;
    }
    public void sayHi(String content) {
        System.out.println(content + " " + content);
    }
}
package com.java.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectSample {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class rc = Class.forName("com.java.reflect.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("Get Hello 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");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值