0%

JVM简介

java语言虽然不是最好的语言,但是JVM是最好的虚拟机,可以作为很多语言的平台,如java、scala、kotlin等,JVM是一个二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条java指令,JVM规范中都有详细定义,如何取操作数,如何处理操作数等

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收功能

在最开始的JVM版本是使用纯解释器的方式来执行Java代码的

扩展

编译器和解释器有什么不同?

编译器是在运行前对所有源代码进行解释处理的,解释器是在运行时对源代码的内容一行一行地进行解释处理的

java代码的执行流程

java代码执行流程

阅读全文 »

spring bean的作用域

spring容器中bean有五种作用域

  • singleton单例:这种 bean 范围是默认的,确保不管接受到多少个请求,每个容器中只有一个 该bean 的实例,单例的模式由 bean factory 自身来维护,在加载spring配置文件时就会创建对象
  • prototype原型:原型范围与单例范围相反,为每一个 bean 请求提供一个实例,在调用getBean方法的时候才会创建
  • request请求:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收,仅在web的Spring WebApplicationContext环境中有效
  • session会话:与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean 会随之失效,仅在web的Spring WebApplicationContext环境中有效
  • application/global-session:该bean的生命周期与ServletContext的生命周期一致,仅在web的Spring WebApplicationContext环境中有效

linux中的dentry对象

dentry是Linux文件系统中某个索引节点(inode)的链接,每个dentry代表路径中的一个特定部分。这个索引节点可以是文件,也可以是目录。inode(可理解为ext2 inode)对应于物理磁盘上的具体对象,dentry是一个内存实体,没有对应的磁盘数据结构,VFS根据字符串形式的路径名现场创建,在dentry中,d_inode成员指向对应的inode。也就是说,一个inode可以在运行的时候链接多个dentry,而d_count记录了这个链接的数量。另外dentry对象有三种状态:被使用,未被使用和负状态

目录项是描述文件的逻辑属性,只存在于内存中,并没有实际对应的磁盘上的描述,更确切的说是存在于内存的目录项缓存,为了提高查找性能而设计,所以它是动态生成的,这不同于inode,inode的数据并不会随进程的消亡而消失。注意不管是文件夹还是最终的文件,都是属于目录项,所有的目录项在一起构成一颗庞大的目录树。VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,沿着目录项进行操作就可以找到最终的文件

一个有效的dentry结构必定有一个inode结构,这是因为一个目录项要么代表着一个文件,要么代表着一个目录,而目录实际上也是文件。所以,只要dentry结构是有效的,则其指针d_inode必定指向一个inode结构。可是,反过来则不然,一个inode却可能对应着不止一个dentry结构;也就是说,一个文件可以有不止一个文件名或路径名。这是因为一个已经建立的文件可以被链接(link)到其他文件名。所以在inode结构中有一个队列i_dentry,凡是代表着同一个文件的所有目录项都通过其dentry结构中的d_alias域挂入相应inode结构中的i_dentry队列

ProxyFactoryBean

ProxyFactoryBean是spring ioc环境中创建AOP应用的底层方法,通过它完成了对AOP的封装

Aop生成过程

1
2
3
4
5
6
7
8
9
10
11
12
13
public Object getObject() throws BeansException {
// 初始化通知器链
initializeAdvisorChain();
// 单例
if (isSingleton()) {
return getSingletonInstance();
}
// 非单例
else {

return newPrototypeInstance();
}
}
阅读全文 »

linux中的inode对象

inode 是 UNIX/Linux 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息,例如文件及目录的基本信息,包含时间、档名、使用者及群组等。在 UNIX/Linux中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引节点),每个文件都有一个唯一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引节点里,在访问文件时,索引节点被复制到内存在,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件

Block 是记录文件内容数据的区域,至于 inode 则是记录 该文件的相关属性,以及文件内容放置在哪一个 Block 之内 的信息