首页 > 编程语言 >JAVA语言学习-Day13

JAVA语言学习-Day13

时间:2024-04-16 18:59:32浏览次数:34  
标签:JAVA 语言 对象 GC 内存 JVM Day13 方法 加载

参考教学视频:秦疆

JVM概述

JVM位置:操作系统之上

JVM的体系结构

.java -> Class File -> 类加载器 Class loader <--> 运行时数据区 Runtime Data Area <--> 本地方法接口 <- 本地方法库

运行时数据区 Runtime Data Area <--> 执行引擎

  • 方法区:Method Area

  • Java栈:Stack

  • 本地方法栈:Native Method Stack

  • 堆:Heap

  • 程序计数器:

  • 执行引擎:executeEngine

  • 本地方法接口:Native Method Interface

JVM调优,方法区,堆

类加载器

作用:加载class文件

  1. 虚拟机自带的加载器

  2. 启动类(根)加载器

  3. 扩展类加载器 ExtClassLoader

  4. 应用程序加载器 AppClassLoader

双亲委派机制:安全

//App -> Ext -> Boot(最终执行)

  1. 类加载器收到类加载的请求

  2. 将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器

  3. 启动加载器检测是否能够加载当前类,如果能就结束,使用当前类加载器,否则抛出异常,通知子类加载器进行加载

  4. 重复步骤3

沙箱安全机制

沙箱:限制程序运行的环境

native、方法区

//native:凡事带了native关键字,说明java的作用范围无法达到,调用了底层c语音库 //会进入本地方法栈,调用本地方法接口 JNI //JNI的作用:扩展Java的使用,融合不同的编程语言为java使用

程序 = 数据结构 + 算法

  1. 栈:数据结构,先进后出

  • 主管程序的运行,生命周期和线程同步;线程结束,占内存释放,对于栈来说,不存在垃圾回收问题

  • 8大基本数据类型+对象引用+实例方法

  1. 队列:先进先出

HotSpot和堆

三种JVM

  • Sun公司:HotSpot

  • BEA公司:JRockit

  • IBM:J9VM

堆(Heap)

一个JVM只有一个堆内存,堆内存的大小是可以调节的

类加载器读取的类文件后,一般会把类、方法、常量、变量~放入堆内存中,保存所有引用类型的真实对象;

堆内存中细分为三个区域:

经过研究,99%的对象都是临时对象

  • 新生区(伊甸园区)Young/New

    • 伊甸园:所有的对象都是在伊甸园区new出来,满了触发一次轻GC

    • 幸存者区(0,1):

  • 老年区 old

  • 永久区 Perm

    这个区域常驻内存的,用来存放JDK自身携带的class对象。Interface元数据,存储的是Java运行时的一些环境或类信息,这个区域不存在垃圾回收,关闭虚拟机就会释放这个区域的内存

    一个启动类,加载了大量的第三方jar包。Tomcat部署了太多的应用,大量动态生成的反射类。不断的被加载,直到内存满就会出现OOM

    • jdk1.6之前:永久代,常量池在方法区

    • jdk1.7:永久代,但是慢慢的退化了,去永久代,常量池在堆中

    • jdk1.8之后:无永久代,常量池在元空间

-Xms1024m -Xmx1024m -XX:+PrintGCDetails

Jprofilter工具分析OOM

  • 能够看到代码第几行出错:内存快照分析工具,MAT,Jprofiler

  • Debug,一行行分析代码

MAT,Profiler工具作用:

  • 分析Dump内存文件,快速定位内存泄露;

  • 获得堆中的数据

  • 获得大的对象

  • 。。。。

-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

GC

  • JVM的内存模型和分区

  • 堆里面的分区有哪些,说说他们的特点

    • Eden

    • From

    • to

    • old

  • GC的算法有哪些

    • 标记清除法

    • 标记整理

    • 复制算法

    • 引用计数器

  • 轻GC和重GC分别在什么时候发生

新生区轻,老年代重

标签:JAVA,语言,对象,GC,内存,JVM,Day13,方法,加载
From: https://www.cnblogs.com/-Gin/p/18138941

相关文章

  • 【视频】R语言支持向量回归SVR预测水位实例讲解|附代码数据
    全文链接:https://tecdat.cn/?p=35914原文出处:拓端数据部落公众号分析师:MiaoqiaoWang当我们面对样本需要建立相应模型时,使用传统统计方法建立模型需要大量的样本数据,只有在样本量足够大时,该模型才具有一定的可靠性,而实际实验中,不一定每次实验都拥有足够大的样本,甚至是小样本,这......
  • R语言预测期货波动率的实现:ARCH与HAR-RV与GARCH,ARFIMA模型比较|附代码数据
    全文下载链接:http://tecdat.cn/?p=3832最近我们被客户要求撰写关于期货波动率的研究报告,包括一些图形和统计输出。在本文中,波动率是众多定价和风险模型中的关键参数,例如BS定价方法或风险价值的计算。在这个模型中,或者说在教科书中,这些模型中的波动率通常被认为是一个常数然而,情......
  • T-SQL——关于求百分比(以及其他语言转百分比)
    目录1.SQL取百分比2.C#取百分比3.JS取百分比shanzm-2024-4-1621:21:451.SQL取百分比示例0:求1/3后取百分比,保留两位小数SELECTCAST(CAST(1*1.0*100/3ASDECIMAL(10,2))ASVARCHAR(50))+'%';--SqlServer2012版本之后:SELECTFORMAT(1*1.0/3,'P')Result;---33......
  • JavaScript简介:从概念、特点、组成和用法全面带你快速了解JavaScript!
    JavaScript,简称JS,是一种轻量级的解释型编程语言,它是网页开发中不可或缺的三剑客之一,与HTML和CSS并肩作战,共同构建起我们浏览的网页。今天我们就来了解一下JavaScript,看看它在我们的web前端开发中扮演着什么样的角色。一、JavaScript是什么?JavaScript(简称“JS”)是一种具有函数优......
  • go语言使用go-elasticsearch/v8如何操作es8.x版本实现索引的增删查改
    import("context""encoding/json""fmt""github.com/elastic/go-elasticsearch/v8""github.com/elastic/go-elasticsearch/v8/esapi""github.com/elastic/go-elasticsearch/v8/esutil&......
  • SpringBoot+MybatisPlus 增删改查学习第三章 (C#转JAVA)
    packagecom.example.demo;importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importcom.example.demo.entity.Person;importcom.example.demo.mapper.PersonMapper;importcom.example.demo.service.PersonService;importorg.junit.jupiter.api.Test;i......
  • java中的抽象
    java中的抽象目录java中的抽象1.抽象类和抽象方法的定义2.抽象类和抽象方法的特点3.abstract的注意事项4.继承方面的特点5.总结1.抽象类和抽象方法的定义抽象类为了把相同但是不确定的东西提取出来,为了方便以后统一使用,并可以具有多种实现方案,目的是为了让子类实现没有方法体......
  • Mysql:canal 客户端 client java包依赖 v1.1.5+
     Cao!<dependencies><dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.7</version></dependency><dependency>......
  • 结对编程 c++语言实现四则运算练习题
    结对同学:2252813程序要求:两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0-100之间通过阅读题目要求,我们决定使用c++语言完成编程,需要满足两个功能,首先生成一个包含两个运算符的算式,参与运算的数字在100之内。下一步检查答案是否正确,并且保证答......
  • java生成图片和pdf
    FlyingSaucer方案FlyingSaucer开源协议的的坑flying-saucer-core-CorelibraryandJava2Drendering开源协议LGPLflying-saucer-pdf-PDFoutputusingOpenPDF(ex.iText2.x)开元协议MPL-2.0/LGPLflying-saucer-pdf-itext5-PDFoutputusingiText5.x(iTex......