JVM基础

JRE:运行java字节码的环境。它是运行已编译java程序所需要的所有内容的集合,主要包括java虚拟机JVM和java基础类库(class library)

JVM:**是Java Virtual Machine的缩写,即Java虚拟机。**‌它是一个虚构的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM的作用是在不同的平台上提供一个统一的运行环境,使得Java程序能够在任何安装了JVM的设备上运行,而不需要针对每个平台进行修改

JDK:提供给开发者使用的工具,它包含了JRE,同时还包含了编译java、源码的编译器javac以及一些其它工具,如javadoc(文档注释工具)、jdb(调试器)、jconsole(基本JMX的可视化监控工具)、javap(反编译工具)等等。

面向对象

异常

java的异常处理会影响我们程序的性能,创建一个异常非常慢,抛出一个异常又得消耗1-5ms

的时间,当一个异常在应用程序的多个层级之间进行传递时,会拖垮我们整个应用程序。

仅在异常情况下使用异常,在可恢复的异常情况下使用异常,心得使用异常有利于java开发,但是在应用中最好不要捕获太多的调用栈,因为在很多情况下都不需要打印调用栈知道哪里出错了。

使用try-with-resources是JDK1.7中提供的一个异常处理机制,它能够很容易地关闭try-catch语句中的资源。所谓的资源是指在程序结束后,必须关闭的对象。try-with-resources语句确保了每个资源在语句结束时关闭。所有实现了java.lang.AutoCloseable接口(也包括实现了java.io.Closeable的所有对象)的对象可以作为资源。

java 复制代码
    public static void main(String[]args]{        
        try(Resource res = new Resource()){

        //TODO 业务逻辑处理

        }catch(Exception e){

                System.out.print(e.printStackTrace());

        }
    }

    class Resource implements AutoCloseable{
        void doSome(){
            System.out.print("do something");
        }
        
        @Override
        public void close() throw Exception{
            System.out.print("resource is closed");
        }
    }

以上代码编译后为自动生成finally代码块,里面会对try里面的Resource资源进行判空,如果非空就对其进行关闭。

在JDK9里面可以直接在try前面声明final类型的Resource,然后try-with-sources里面写上变量名即可。

集合

线程

IO

网络通信

反射

java反射是java的一个特性,它允许程序在运行时对自身进行检查,并且能够操作类、接口、字段 、方法等。反射提供强大的功能,但也带来一些技术难点。

基本原理

1、类的加载:java反射始于类的加载。当使用Class.forName()或其它类加载器加载类时,JVM会读取类的字节码文件,并将其转化为Class对象,这个对象包含了元数据信息,如类名、包名、父类、实现的接口、字段、方法等。

2、:获取类的信息:通过Class对象,我们可以获取类的各种信息,例如,使用getMethod()方法猎取类的所有公共方法,使用getDeclaredFields()方法猎取类的所有字段(包括私有字段)。

3、动态调用:反射不仅能允许我们获取类的信息,还允许我们动态地创建对象、调用方法、修改字段值等。通过newInstance()方法可能创建类的实例,通过getMethod()猎取方法并使用invoke()方法调用它。

技术难点:

1、性能:比直接操作代码更慢,因为反射涉及到动态解析和类型检查等。

2、安全性:反射允许访问类的私有成员,这可能导致安全漏洞。如果反射被恶意代码使用,可能会破坏系统的安全性。

3、复杂性:反射的操作相对比较复杂,需要深入理解java的类型系统和类加载机制。另外反射可能会带来一些安全性的问题。可以通过以下措施来尽量减少安全问题:

1、访问控制:java提供了访问控制修饰符来控制对类的成员的访问。虽然反射可以安全码这些限制,但我们应该避免在不需要时这样做。在设计API时, 应该只暴露必要的公共接口,并隐藏敏感的内部实现。

2、代码签名和验证:JVM在加载类时会对类的字节码进行验证,以确保符合java语言的规范。此外,还可以使用代码签名来验证类的来源是否可信,这可防止恶意代码被加载到JVM中。

3、最小权限原则:在编写使用反射的代码时,应遵循最小权限原则,则只请求执行所需任务所需的最小权限,例如,如果只需要可以读取某个字段的值,就不要请求修改该字段的权限。

4、安全管理器:java提供了一个安全管理器(SecurityManager)类,它允许应用程序定义自己的安全策略。通过实现自定义的安全管理器,可以限制反射的使用,例如禁止加载来自不受信息的源的类。

5、代码审计和测试:对使用反射的代码进行严格的审计和测试是确保安全性的重要步骤。这包括检查是否有不安全的反射使用,验证输入数据的有效性以及确保代码符合安全最佳实践等。

泛型

相关推荐
东阳马生架构3 小时前
JVM简介—3.JVM的执行子系统
jvm
程序员志哥9 小时前
JVM系列(十三) -常用调优工具介绍
jvm
后台技术汇9 小时前
JavaAgent技术应用和原理:JVM持久化监控
jvm
程序员志哥10 小时前
JVM系列(十二) -常用调优命令汇总
jvm
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭10 小时前
聊聊volatile的实现原理?
java·jvm·redis
_LiuYan_13 小时前
JVM执行引擎JIT深度剖析
java·jvm
王佑辉13 小时前
【jvm】内存泄漏的8种情况
jvm
工业甲酰苯胺13 小时前
JVM简介—1.Java内存区域
java·jvm·python
yuanbenshidiaos1 天前
c++---------数据类型
java·jvm·c++
java1234_小锋1 天前
JVM对象分配内存如何保证线程安全?
jvm