心灵鸡汤:

加载中...

jvm整理

jre jdk jvm三者区别

Jdk是Java 开发工具包,jdk文件夹下面的bin目录有提供一些工具程序,比如:java.exejavac.exejavadoc.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

好处:保证类不被轻易纂改,数据安全

各个类加载器级别:从小到大

  1. BootStrap ClassLoader:rt.jar
  2. Extension ClassLoader: 加载扩展的jar包
  3. App ClassLoader:指定的classpath下面的jar包
  4. Custom ClassLoader:自定义的类加载器

类加载顺序

!>加载、连接(验证+准备+解析)、初始化、使用、卸载。

  1. 加载:加载.class文件;

  2. 验证:检查.class文件是否正确;

  3. 准备:给类分配一定的内存空间;

  4. 解析:将常量池内的符号引用替换为直接引用;

  5. 初始化:执行 static 代码块进行初始化,如果存在父类,先对父类进行初始化;

  6. 使用:为对象分配内存空间和初始化;

  7. 卸载:GC回收类对象。

判断对象是否存活

  1. 引用计数法
  1. 可达性分析

垃圾回收算法

标记清除、复制算法、标记整理三种算法

GC调优或Jvm调优

一般项目加个 xmsxmx 参数就够了。在没有全面监控、收集性能数据之前,调优就是瞎调。

调优工具

一些JDK自带命令jpsjstatjmapjhat
有兴趣可以去了解一下阿里出品的java诊断调优神器Arthas

posted @ 2025-03-20 15:25  Mosey  阅读(14)  评论(0)    收藏  举报
TOP