java虚拟机:
java虚拟机包括一个classloader 和一个执行引擎。
执行引擎:
执行引擎的实现多种多样,主流有4种
1:解释执行 最简单的执行方式。
2:just-in-time compiler 编译的时候缓存编译出来的本地机器码,然后执行。缺点是浪费内存。
3:自适应优化器 属于解析执行和juest-in-time的折衷产品。首先解释执行,然后监控,碰到有性能损耗比较大的代码块,就缓存机器码执行。
4:机器内嵌实现的执行器
前三种都是软件实现的执行引擎。
如果是以软件方式实现的执行引擎,那么 java程序通过调用native-method与本地机器进行交互。
java有两张方法,java方法和native-method。java方法是编译后保存在class文件中的,是可移植的。而native-method是通过底层代码例如C++、汇编其它语言编写的,编译成机器代码保存在动态链接库中,是不可移植的。
如果调用了非java api的native-method,那么这块java代码就是非平台无关的了。
名词解释:JNI java native-method interface 本地方法接口
类装载器 classloader
系统类加载器(默认) 用户自定义类加载器
用户自定义的类加载器是可以在系统类加载器上面的,可以是一个纯java程序。
一个类被装载之后,他所引用到的类,必然是通过同一个classloader装载进来的,默认一个类只能看见同一个classloader装载的其他类。因为这种特性,java允许一个应用有多个namespace。从不同源文件获取的class文件应该分割在不同的namespace当中,这样可以控制影响范围,也可以控制一些恶意代码。
java 平台无关的局限性
1:只有在部署了虚拟机的机器上才能跑
2:java的版本变化
3:不能调用本地方法 native-method
4:使用非标准API时需要知道是否调用native-method
5:不能以来finalization 和线程优先级来确保程序正常运行。
因为finalization在不同的垃圾收集器当中运行的时间是不一样的。而java的线程优先级没有要求高优先级的获得cpu时间片的时候低优先级不能获得cpu时间。
6:界面依赖
7:java平台的BUG
java的安全性
java使用沙箱模型来限制java程序对系统的破坏。
java的基本沙箱包括:
类装载器模型 class文件校验器 内置于语言和虚拟机的安全特性 安全管理和java api
类装载器通过使用双亲委派模型来进行一些安全策略。
双亲委派模型,将虚拟机划分成四层
启动类加载器(java核心包)
扩展包加载器
classpath加载器
网络加载器
类加载器会首先从最上层的加载器中加载,找不到的时候再逐层往下,当一个网络class文件想要伪造一个java核心包里面的代码时,会直接从启动类加载器中读取,防止伪造。而当比如一个java.lang.virus的病毒文件想要访问其它java.lang库类的时候,会发现,他是从网络加载器里面加载的,和启动加载器不在同一个加载器当中而无法访问。
class文件校验器
class文件校验器会对class文件做四次校验
第一次校验在装载class文件时检查,检查class的内部接口,确保能否被正常编译
第二次和第三次是在连接过程中检查的。分别检查语义和字节码
第四次检查动态引用到的类和方法确实存在。
安全管理器
默认不会加载任何的安全管理器,需要应用自己通过System.setSecurityManager()的方法来定义安全管理器。java提供了一个默认的SecurityManage实现类,也可以通过-Djava.security.manage来指定。
java1.2之后的安全管理器大多是调用一个checkPermission(Permission perm)的方法来进行安全校验,如果校验通过就正常返回,否则就抛出异常。
checkPermission方法只是简单的调用一个静态方法,讲Permssion对象传递到AccessController当中,具体的安全策略则由AccessController来掌握。
分享到:
相关推荐
Java 虚拟机(JVM)自动内存管理机制 Java 虚拟机(JVM)自动内存管理机制是 Java 语言的一大特色,它使得 Java 程序员无需手动管理内存,从而提高了开发效率和程序稳定性。JVM 自动内存管理机制主要通过 JVM 的...
深入理解Java虚拟机,首先我们要明白Java虚拟机(JVM)的核心功能:它负责装载类文件,执行字节码,并管理内存。Java虚拟机的结构复杂且高效,主要由类装载器、执行引擎、内存管理和类库等组件构成。 类装载器是JVM...
读书笔记:学习周志明先生的深入理解Java虚拟机的笔记
通过阅读《深入理解Java虚拟机》第三章,开发者不仅可以深入理解Java的安全机制,还能学习到如何在实际项目中实施这些安全策略,提升应用的安全性。对于想要从事Java开发或者对系统安全有深入了解需求的人来说,这一...
理解这些概念对于深入学习Java和优化Java应用性能至关重要。在面试或日常工作中,掌握JVM的工作原理、JVM与操作系统、JRE和JDK的关系,可以帮助我们更好地理解Java程序的运行机制,解决性能问题,以及进行高效的代码...
### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...
### 深入理解Java虚拟机(JVM)的关键知识点 #### 一、Java与Java虚拟机的关系 Java语言的设计者们为了使Java程序能够跨平台运行,引入了一个概念——Java虚拟机(JVM)。简单来说,Java源代码在编译成`.class`...
本篇文章将深入探讨Java虚拟机中的垃圾收集器(GC)及其对内存管理的影响。 1. 垃圾收集器的由来与作用 垃圾收集器的引入主要是为了解决内存管理的问题。在没有GC的情况下,程序员需要手动释放不再使用的对象,这...
### 学习深入理解Java虚拟机的前几章笔记 #### JVM内存模型 Java虚拟机(JVM)的内存模型主要分为两大类:线程共享区和线程私有区。 ##### 线程共享区 - **堆**:是所有线程共享的内存区域,在这里存放着对象实例...
总的来说,"深入理解Java虚拟机读书笔记之:第3章 安全(2)"主要涵盖了Java安全体系的核心概念,包括类加载器、权限模型、安全管理器以及相关工具的使用。理解这些内容对于任何希望构建安全、可靠的Java应用程序的...
读书笔记:深入理解Java虚拟机(周志明)源码及学习笔记
### 学习笔记之Java虚拟机详解 #### 运行时数据区域概览 Java虚拟机(JVM)运行时数据区域主要包括以下几部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 1. **程序计数器**: -...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第3版学习笔记
《JVM:深入理解Java虚拟机》是一本深入解析Java虚拟机工作原理和技术细节的经典书籍。这份学习笔记将涵盖JVM的关键概念、架构以及它如何影响Java程序的性能。我们将探讨以下几个方面: 1. **JVM概述** Java虚拟机...
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第3版 周志明 学习笔记
读书笔记:《深入理解Java虚拟机JVM高级特性与最佳实践第2版》学习笔记
9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收机制,有助于优化代码性能。 10. **泛型**:讨论Java泛型的使用,如何编写类型安全的代码,并理解其类型擦除的原理。 11. **枚举与...
它能干什么,文章从作者得角度带大家深入Java虚拟机相关内容,希望对大家有帮助。这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器。...
Java以其“一次编写,到处运行”的特性赢得了全球程序员的喜爱,它的跨平台能力得益于Java虚拟机(JVM)。 接着,笔记会深入讲解Java的语法基础,如变量、数据类型、运算符、流程控制语句(如if、for、while)以及...