首页 > 编程语言 >Java分布式应用:深入了解JVM

Java分布式应用:深入了解JVM

时间:2023-03-08 11:39:45浏览次数:41  
标签:Java 字节 分布式应用 回收 JVM class 加载


第三部分 深入理解JVM

Java代码的执行过程

Java源码编译机制
javac 将java源码转换成java class字节码
java 运行java class字节码
Java编译后产生的是字节码,在运行的时候将字节码转换成机器码。

Java类加载机制
类加载的任务就是.class文件加载到到JVM转换成 java.lang,.class类
类加载过程:装载、链接和初始化。
a.装载:找到.class二进制字节码并加载到JVM,JVM通过类的全限定名以及类加载器完成类加载;
b.链接:对二进制字节码的格式进行校验,初始装载类的静态变量以及解析类中的接口、类。
c.初始化:执行类中的静态初始化代码、构造模块以及静态属性的初始化。

Java类执行机制
字节码解释执行:将源码编译成JVM字节码的形式,JVM对其进行执行
编译执行:将.class转换成机器码后,进行执行
反射执行:通过反射机制获取类的字节码后,进行执行
注:Java编译后产生的是字节码,在运行的时候将字节码转换成机器码。

内存管理

Java内存区域(运行时数据区)

Java分布式应用:深入了解JVM_JVM


共享的:

方法区:类的共有属性 (包括常量缓存区、运行时常量池)。

JVM堆:对象、数组

隔离的:(“双栈”是隔离的)
本地方法栈:Natitve 方法
虚拟机栈(JVM方法栈):局部变量区和操作数栈
存放基本类型的数据和对象的引用

注:每一个线程都会生成PC寄存器(存放指令偏移量)和虚拟机栈。

垃圾回收机制

垃圾回收的算法
a.标记-清除算法:效率偏低
b.复制算法:效率高,但是占用2倍内存 (预留一块内存 将还存活的对象放到该内存)
c.标记-整理算法:效率偏低(是对标记-清除算法的改进,让存活的对象向一段移动)
d.分代收集算法:把Java堆分为新生代和老年代,根据年代将特征选择上述算法。
老年代通常使用:a、c
新年代通常使用:b

GC分为2个部分:
Minor GC:收集新年代的区域
Full GC:收集 新年代和老年代的区域

注:
a.触发 Full GC的条件:持久代满了、老年代满了 、System.gc()
b.新年代满了,会放至到空闲的Survivor区,只有所有的Survivor区满了才会放到老年代。

Java垃圾回收器:
a.串行垃圾回收器:单线程 “牵一发动全身”
b.并行垃圾回收器:多线程
c.并发标记扫描垃圾回收器 CMS:利用多线程对需要回收的对象进行标记并回收。
d.G1垃圾回收器:对比较大的进行回收,可以先压缩再回收。

既然有 GC 机制,为什么还会有内存泄露的情况:
存在无用但可达的对象,比如Hibernate中的Session,如果不及时flush()或者close(),可能引发内存泄露。

System.gc()和Runtime.gc()会提示JVM要进行垃圾回收。但是,立即回收还是延迟回收是取决于JVM的。

Java分布式应用:深入了解JVM_Java_02


标签:Java,字节,分布式应用,回收,JVM,class,加载
From: https://blog.51cto.com/u_15997399/6107929

相关文章

  • Java基础面试(三)
    Java基础面试(三)1.Java一个类当中如果没有构造函数,编译器会自动生成一个缺省的构造函数;如果这个类有其他的构造函数,编译器则不会提供缺省构造参数。2.SpringMVC与Struct2.......
  • 实现动态切换版本JDK8和JAVA17
    一、下载安装两个版本的JDK官网下载地址:JavaDownloads|Oracle下载安装成功后,安装路径E:\Java\上 JDK8 有两个包一个jdk1.8.0_231,一个jre1.8.0_231。JDK17只有一个j......
  • java map集合的基本功能
          ......
  • java标识符,关键字和运算符
    Java标识符和关键字数据类型​Java数据类型分为基本类型和引用类型。基本类型整数类型:byte,占一个字节范围:-128~127short,占两个字节范围:-32768-32767int,占4个字......
  • jmeter发送java请求
    本文描述jmeter如何发送java请求1.编写java请求,将加密、签名等封装,对外只暴露需要传的业务参数,jemter发送java请求时直接传入业务参数即可  具体代码如下:importco......
  • Paxos算法理解与java实现
    Paxos在分布式环境下应用非常广泛,是一致性算法里面优越的代表。Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过:所有一致性协议本质上要么是Paxos要么是其变体。......
  • Java堆分析
    在JVM中,有以下内存区间:堆、永久区、线程栈、直接内存内存溢出(OOM)的原因及解决方法堆溢出原因:占用大量堆空间,直接溢出解决方法:增大堆空间,及时释放内存永久区溢出原因:生成......
  • mybatis异常 java.lang.ClassCastException: com.sun.proxy.$Proxy445
    此类异常处理:java.lang.ClassCastException:com.sun.proxy.$Proxy445cannotbecasttocom.xxx.**MapperBridgeApplication启动类的注解没有扫描到对应的Mapper文......
  • Java开发工具
    吾心安处即吾乡。吾乡何处不可眠1.都有哪些开发Java的工具级别一:文本开发工具级别二:集成开发环境(IntegratedDevelopmentEnvironment,IDE)把代码编写,编译,执行,......
  • JAVA的DigestUtils.md5Hex在php的写法
    php对接java接口时签名校验时,发现php的MD5加密跟java中的DigestUtils.md5Hex加密会不一样,需要统一输出;解决方法如下:/***16进制转string拼接*@paramarra......