jvm整理
jre jdk jvm三者区别
Jdk是Java 开发工具包,jdk文件夹下面的bin目录有提供一些工具程序,比如:
java.exe、javac.exe、javadoc.exe等等
Jre是java运行时环境
Jvm是java虚拟机
Jdk包含Jre,Jre包含Jvm
.java后缀文件运行
1.
javac xxx.java命令把.java文件编译成.class字节码文件
2.
java xxx命令把字节码文件放到Jvm中执行代码程序
java跨平台性
JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。
JVM是Java语言跨平台(这里的“平台”是指不同的操作系统)的基础,要想在不同的操作系统上运行Java程序,就需要在不同操作系统上安装对应的JVM。所以,JVM有Windows版本、MAC版本、Linux版本等。
jvm一些理解

-Xmx(最大堆内存)、-Xms(最小堆内存)这两个jvm调优参数,是对堆进行控制的,如果内存不足,就报OutOfMemoryError:java heap space异常。
堆和方法区是共享的,
jps命令查看当前用户的Java进程,非系统中所有的进程。
队列和栈的区别
队列的插入叫入队,队列的删除叫出队。栈的插入叫进栈,栈的删除叫出栈。
队列在队尾入队,队头出队,即两边都可操作。而栈的进栈和出栈都是在栈顶进行的,无法对栈底直接进行操作。
队列是先进先出,栈为先进后出
双亲委派机制
理解:在类加载的时候,类加载器要加载编译后的.class文件,这时,类编译器会首先向上级类加载器请求访问有没有加载过,有加载过就不用自己加载,如果都没有找到,就会报
ClassNotFoundException
好处:保证类不被轻易纂改,数据安全
各个类加载器级别:从小到大
- BootStrap ClassLoader:rt.jar
- Extension ClassLoader: 加载扩展的jar包
- App ClassLoader:指定的classpath下面的jar包
- Custom ClassLoader:自定义的类加载器
类加载顺序
!>加载、连接(验证+准备+解析)、初始化、使用、卸载。
-
加载:加载.class文件;
-
验证:检查.class文件是否正确;
-
准备:给类分配一定的内存空间;
-
解析:将常量池内的符号引用替换为直接引用;
-
初始化:执行 static 代码块进行初始化,如果存在父类,先对父类进行初始化;
-
使用:为对象分配内存空间和初始化;
-
卸载:GC回收类对象。
判断对象是否存活
- 引用计数法
- 可达性分析
垃圾回收算法
标记清除、复制算法、标记整理三种算法
GC调优或Jvm调优
一般项目加个
xms和xmx参数就够了。在没有全面监控、收集性能数据之前,调优就是瞎调。
调优工具
一些JDK自带命令
jps、jstat、jmap、jhat等
有兴趣可以去了解一下阿里出品的java诊断调优神器Arthas

浙公网安备 33010602011771号