Java学习之常见知识盘点

安全性

 严格遵循面向对象的规范。这样封装了数据细节,只提供接口给用户。增加了数据级的安全性。

 无指针运算。java中的操作,除了基本类型都是引用的操作。引用是不能进行增减运算,不能被直接赋予内存地址的,从而增加了内存级的安全性。

 数组边界检查。这样就不会出现C/C++中的缓存溢出等安全漏洞。

 强制类型转换。非同类型的对象之间不能进行转换,否则会抛出ClassCastException

 语言对线程安全的支持。java从语言级支持线程。从而从语法和语言本身做了很多对线程的控制和支持。

 垃圾回收。

 Exception。

类加载

原理:  ClassLoader使用的是双亲委托模型来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap  

ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。

  当一个ClassLoader实例需要加载某个类时,它会试图亲自搜索某个类之前,先把这个任务委托给它的父类加载器,这个过程是由上至下依次检查的,首先由最顶层的类加载器Bootstrap  

ClassLoader试图加载,如果没加载到,则把任务转交给Extension ClassLoader试图加载,如果也没加载到,则转交给App  ClassLoader 进行加载,如果它也没有加载得到的话,则返回给委托的发起者,由它到指定的文件系统或网络等URL中加载该类。

  如果它们都没有加载到这个类时,则抛出ClassNotFoundException异常。否则将这个找到的类生成一个类的定义,并将它加载到内存当中,最后返回这个类在内存中的Class实例对象。

内存组成

堆(Heap)

 运行时数据区域,所有类实例和数组的内存均从此处分配。Java虚拟机启动时创建。对象的堆内存由称为垃圾回收器 的自动内存管理系统回收。

  News Generation(Young Generation即图中的Eden + From Space + To Space)

  Eden 存放新生的对象

 Survivor Space 两个 存放每次垃圾回收后存活的对象

Old Generation(Tenured Generation 即图中的Old Space) 主要存放应用程序中生命周期长的存活对象

非堆内存

  JVM具有一个由所有线程共享的方法区。方法区属于非堆内存。它存储每个类结构,如运行时常数池、字段和方法数据,以及方法和构造方法的代码。它是在Java虚拟机启动时创建的。除了方法区外,Java虚拟机实现可能需要用于内部处理或优化的内存,这种内存也是非堆内存。例如,JIT编译器需要内存来存储从Java虚拟机代码转换而来的本机代码,从而获得高性能。

 Permanent Generation (图中的Permanent Space)存放JVM自己的反射对象,比如类对象和方法对象

 native heap

 

 

posted @ 2021-11-05 11:01  指尖上的代码go  阅读(34)  评论(0)    收藏  举报