- 对JVM的理解?
- java8虚拟机和之前的变化更新?
- 什么是OOM?
- 什么是栈溢出StackOverlowError?
- JVM的常用调优参数有哪些?
- 内存快照如何抓取,怎么分析Dump文件?
- 类加载器的认识?
JVM的位置
JVM存在于JRE之内
JVM作为虚拟机,运行在操作系统之上(常见Windows、Linux、Mac)
操作系统之下—>硬件体系(Intel、Spac)
JVM的体系结构
java程序—>(通过
java-c编译)Class File—>类加载器(Class Loader)
—>运行时数据区(Runtime Data Area)(运行时异常就发生在这里,不可捕获)虚拟机就存在于本区域
在jvm附近还会有,执行引擎、本地方法接口(本地方法库)
方法区(Method Area)
虚拟机栈(VM stack)
本地方法栈(Native Method Stack)
堆(Heap)
程序计数器(Program Counter Register)
注意:
- 栈(即用即弹)、本地方法区、程序计数器不存在垃圾
- 所谓JVM调优,毕竟垃圾只能存在于方法区和堆,所以调优更多是在调堆

PC寄存器(程序计数器)
每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储只想像一条指令的地址,也即将要执行的指令代码)
在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记
方法区
方法区(Method Area)是被所有线程共享的,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码 也在此定义
此区域属于共享区间:
静态变量static、常量final、类信息class(构造方法、接口定义)、运行时的常量池
存在于方法区中,但是 实例变量 存在对内存中,和方法区无关
要学会画一个类定义加载阶段的图
Native本地方法区
native关键字是什么?
凡是带了native关键字的说明,java作用范围达不到了,会调用底层C语言的库
我的理解:
就像是前边说的,返回了一个null,已经到了JAVA达不到的范围了,就可以通过native调用C语言的
到了本地方法栈,会调用本地方法接口(JNI),本地方法库
JNI的作用:
融合不同的编程语言,扩展Java类的使用,为Java所用 刚开始就是用来调用C和C++的,后来出现了百花齐放的情况,什么语言都可以了 在内存区域中专门开辟了一块标记区域(本地方法栈),为了登记native方法,会在最终执行的时候,通过JNI加载本地方法库中的方法 不过现在Java发展已经到了一定程度,基本用不上native方法了,一般会放在硬件层面的调用,会涉及native,例如:打印机、管理系统、robot等 企业级应用中较为少见,所以大概了解即可 调用其他接口:Socket、WebSerbice、http等,其实存在意义就是几种语言我想共享
-
- 安全提供者
- 消息摘要
- 数字签名
keytoolshttps——>需要证书(收费) - 加密
- 鉴别
java.security下的类和扩展包下的类,允许用户为自己的应用增加新的安全特性,包括
安全软件包
- 是核心API和操作系统之间的主要接口,实现权限控制,比存取控制器优先级高
安全管理器
- 存取控制器可以控制核心API对操作系统的存取权限,而这个控制的策略设定,可以由用户指定
虚拟机为不同的类加载器载入的类提供不同的命名空间,命名空间由一系列唯一的名称组成,每一个被装载的类将有一个名字
这个命名空间是由Java虚拟机未每一个类装载器维护的,他们互相之间甚至不可见
类装载器采用的机




最低0.47元/天 解锁文章
1115

被折叠的 条评论
为什么被折叠?



