# 2020.08JVM基础整理

2020.08JVM基础整理

打开CMD 的方式

1.开始菜单+系统+命令提示符
2.win键+R 输入 cmd 打开控制台
3.任意文件下 shift键 +鼠标右键
4.资源管理器地址 前面加 cmd 路径
管理员方式运行 选择以管理方式运行

常用的Dos 命令

  1. 盘符切换 ,例子 :D: 进入 D盘;
  2. 查看当前目录下的所有文件 dir 命令;
  3. 切换目录 cd (change directory) 切换目录;—>切换到 盘内 cd /d F: –>切换到 文件内 cd /d F:\ide —>进入同级目录文件 cd ide
  4. 返回上一级目录 cd …
  5. 清理屏幕 cls (clear screen)
  6. 查看ip ipconfig
  7. **ping ** 查看网络ip信息;
  8. 创建文件夹 md 目录名 创建文件夹;
  9. 删除文件命令****del 文件名 创建文件命令 cd>文件名
    10.删除文件夹****rd 目录名

JavaSE总结

JDK 开发者工具包 配置环境 变量
JRE 运行环境
JVM java虚拟机 java->java.class->jvm
JVM探究 :
1.JVM的位置
在操作系统中是程序, java的语句运行环境
2.JVM的体系结构
JVM垃圾不会在方法区内产生
JVM 调优 就是 调堆
JVM调优 调的是 堆
JVM架构图

	3.类的加载器
		作用: 加载class文件 --new() ;
		类加载器 收到类的加载请求
		将这个请求向上委托给父类加载器完成,一直向上委托 直到  启动类加载器,
		启动类加载器检测是否能够加载这个类,能加载 就结束使用当前加载器,否则 抛出异常,通知子加载器进行加载
		类加载器的等级
		1.虚拟机自带的加载器
		2.启动类的 (根)加载器BOOT
		3.扩展类加载器 EXC
		jdk.internal.loader.ClassLoaders$PlatformClassLoader@7530d0a
		4.应用程序加载器 App
		jdk.internal.loader.ClassLoaders$AppClassLoader
	4.双亲委派机制
	防止内存中出现多份同样的字节码
	比如两个类A和类B都要加载System类:
	如果不用委托而是自己加载自己的,那么类A就会加载一份System字节码,然后类B又会加载一份System	字节码,这样内存中就出现了两份System字节码。
	如果使用委托机制,会递归的向父类查找,也就是首选用Bootstrap尝试加载,如果找不到再向下。这里的System就能在Bootstrap中找到然后加载,如果此时类B也要加载System,也从Bootstrap开始,此时Bootstrap发现已经加载过了System那么直接返回内存中的System即可而不需要重新加载,这样内存中就只有一份System的字节码了。
	//双亲委派机制 为了安全
	// 应用程序加载器 App -->扩展类加载器 EXC -->启动类的 (根)加载器BOOT
	(1)如果一个类加载器收到了类加载请求,它并不会自已先去加载,而是把这个请求委托给父类的加载器去执行;
	(2)如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;
	(3)如果父类加载器可以完成类加载任务,就成功返回,若父类加载器无法完成此加载任务,子加载器才尝试自已去加载;
	5.沙箱安全机制
	Java安全模式的核心 限制程序运行的环境
	6.Native本地方法接口
	类中 不能声明方法, Native 关键字 说明java的作用范围达不到。调用底层C语言的库,
	会进入本地方法栈,会调用本地方法接口 JNI 本地方法接口
	JNI 的作用 扩展java 类的使用 融合不同的编程语言 为java所用 
	在内存区域 专门开辟了一块标记区域。
	在最终执行的时候 加载本地方法库中的方法

	7.PC寄存器
		程序计数器  :ProgramCounter Register
		每个线程东游一个程序计数器,线程私有的,就是一个指针。指向方法区中的方法字节码 用来存储指向下一条指令的地址,在执行引擎读取下一条指令
	8.方法区
	方法区是被所有线程共享, 所有定义的方法的信息都保存在该区域 属于共享区域
	静态变量 常量 构造方法 接口定义,运行时的常量池 存在方法区,但是实例变量 存在堆内存中 与方法区无关
	static final class  常量池
	9.栈  数据结构   
	栈 先进后出,后进 先出  桶结构  mian 方法 压栈 执行
	队列: 先进先出 FIFO first input First output
	栈溢出   递归 调用 
	栈内存  主管程序的运行,生命周期和线程同步,线程结束 栈内存释放  不存在垃圾回收问题  
	栈:8大基本类型+对象引用+实例的方法
				程序 = 数据结构 +算法 

	10.堆 Heap 
	  一个JVM 只有一个堆内存, 大小可以调节
	类加载读取类文件后,存放 类 方法 常量 变量。 保存我们所有引用类型的真实对象
	堆内存 分为三个园区   
	新生区 new  --> 幸存区 from  -->幸存区 to  (空)
	养老区 old
	永久区 perm    元空间 (jdk8)
	GC 垃圾回收 主要在 新生区和养老区
	11三种JVM
	SUN  HotSpot  
	BEA JRockit
	IBM J9VM
	
	
	12.新生区  老年区
	13.永久区  
	这个区域常驻内存   用来存放jdk 自身携带的class对象 interface元数据,存储的是 java 运行时的一些环境 或类信息。 这个区域不存在垃圾回收   关闭vm  虚拟 就会释放这个区域的 内存
	jdk 1.6 永久代  常量池是方法区
	jdk 1.7永久代  常量池在堆中
	jdk 1.8 无永久代 常量池 在原空间
	原空间  逻辑上存在 物理不存在
	14.堆内存的调优
	默认情况 分配的总内存 时电脑内存的 1/4,初始化的内存是 1/64
	oom  堆溢出 
	 尝试扩大 堆内存 看结果
	 分析内存 看哪个地方出现问题  (插件)
	 
	*** -Xms1024m -Xmx1024m -XX:PrintGCDetails ***
	***-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError**


	15.GC垃圾回收  产生的 新生区 幸存区 
	GC 分两种  轻GC  重GC
			常用算法   引用计数法   复制算法
	16.JVMM
	17.总结
	
	java8的虚拟机更新
	内存溢出OOM
	栈溢出 StackOverFlowError 
	JVM常用调优参数
	内存快照如何抓取,分析Dump 文件
	JVM 类加载器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值