Java高级面试题(二)-- JVM

Jvm虚拟机,运行在操作系统之上,编译执行java代码

1, 面试官:手绘一个类加载过程

补充: 这里的执行硬件 java 调用 c++ 指令 创建线程 ,new thread()->start() 底层代码就是 

native  start0();这个方法(该方法就是c++指令);

 面试官: 什么双亲委派机制 ? 

  小菜: 其实就是父类委派 ,类加载器收到new String()指令 就向上从 root (rt,jar)找  -》 ext(文件下的jar) -》 最后执行,

例如 String 存在 rt.jar 如果自动一个同名,那么就报错,双亲委派,父类里面不被重写,安全性。

方法区:静态变量、常量、 类信息(构造方法,接口定义) ,运行时的常量池也在内,实力变量在堆内存中;(非堆)

栈: 栈内存, 主管程序的运行,生命周期,和线程同步,

 即 局部变量、部分结果,并参与方法的调用和返回

  1. Java虚拟机栈(Java Virtual Machine Stack) ,早期也叫Java栈。
  2. 每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame) ,对应着一次次的Java方法调用。
  3. 是线程私有的

堆 :

程序运行时动态申请和释放区域,

实例对象和数组;我们常说的jvm 调优就是调节堆内存,

从划分区分,新生区(伊甸园区(幸福区1 幸福区2)),老年区, 永生区(元空间,jdk1.8)永久代就是 JVM 的方法区。在这里都是放着一些被虚拟机加载的类信息,静态变量,常量等数据。这个区中的东西比老年代和新生代更不容易回收。;

面试题:开发中遇到的异常有哪些?

Java虚拟机规范允许Java栈的大小是动态的或者是固定不变的。

如果采用固定大小的Java虚拟机栈,那每一个线程的Java虛拟机栈容量可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError异常。

如果Java,虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那Java虚拟机将会抛出一个OutofMemloryError 异常。

总结:  栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。

GC:

垃圾回收, 分为 minor GC ,轻量级回收,当eden 区满时候,出发一次,即申请一个对象是发现eden区不够,触发一次轻gc; 触发之后,from -to 存活的的第项会移动到幸福区,无用对象被回收。

Major Gc  和 full GC 触发条件一般为: Major GC (重gc) 通常是跟full GC 是等价的

他的触发时机一般不是固定的,而是根据jvm 根据堆内存的使用情况,对象的存活情况以及gc 算法等因素决定。

1, 一般情况 老年代内存不足,: 当老年代区域的空间不足会触发。

2,程序中system.gc() 可以触发;但是这只是发出通知,实际根据jvm 算法 决定

 GC ;垃圾回收算法: 复制算法(轻gc),从一块内存复制到另一块内存;速度快,没有内存碎片,需要消耗内存空间;

   标记清除(老年代):将标记的对象,清除, 速度快,不消耗内存空间,但是会造成内存碎片;

标记压缩 : 在标记清除的算法上改良,标记清楚后,进行内存压缩,缺点:扫描两次;

老年代区域就是用标记清除 在压缩;       

住:只有经历 15 次 Minor GC 还能在新生代中存活的对象,才会被送到老年代 ,减少老年代的区域过早的满,因为满了 需要触发full Gc 这会非常消耗时间;

 jvm 内存分析命令 : 

当出现OutOfmemaryError,

jps : 显示系统内所有hotspoot 进程

jmap , 用于生成 heap dump 文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现 OOM 的时候自动生成 dump 文件;

jmap -heap  进程id 查看堆信息;

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

-l :

  • -l :除了输出堆栈信息外, 显示关于锁的附加信息

jstack -l 线程id|more

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397280.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SuccBI+低代码文档中心 — 分析报表

报表设计器界面介绍 报表设计器是用来设计报表的可视化工具,使用类Excel的、基于单元格的、所见即所得的方式设计报表,报表设计器界面如下图: 报表设计器主要包括如下功能板块: 数据源:数据源区域列出了可以用于报表…

haproxy高级功能配置

介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用…

OpenGL ES->工作机制

渲染流程 渲染目的:输入3D立体坐标,输出绘制后的2D平面像素工作流程:顶点着色器->图元装配->几何着色器->光栅化->片段着色器->测试与混合,整个工作流程被封装在GPU内部,无法改变。运行在CPU的代码调用…

acpi 主板布局需要 efi

今天在折腾 ESXI 的时候,启动虚拟机跳出了 acpi 主板布局需要 efi 然后我就将 ESXI 的启动方式改为了 EFI 但是虚拟机有莫名的启动不了,网上也没有找到办法,最后,我将虚拟机类型有原本的 ubuntu 换成了 debian 最后启动成功&…

【弱监督时间动作定位】ACGNet: Action Complement Graph Network for WSTAL 论文阅读

ACGNet: Action Complement Graph Network for Weakly-supervised Temporal Action Localization 论文阅读 AbstractIntroductionRelated WorkAction Complement Graph NetworkMethod OverviewAction Complement GraphGraph InferenceTraining Objective ExperimentsConclusion…

nvm node yarn 的安装教程

一、完全卸载旧的nodejs 1、控制面板卸载 nodejs 2、删除node的安装目录 3、删除C盘中遗留的文件 4、将有关node的环境变量删除 5、查看卸载是否成功 npm -v node -v二、安装并配置NVM 1、下载NVM 地址:https://github.com/coreybutler/nvm-windows/release…

移除元素OJ详解

一、题目介绍 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&am…

资料分析公式

年均增长量 年均增长率

SpringIOC和SpringAOC

lombok插件 XML<!-- 加载资源文件 --><context:property-placeholder location"classpath:jdbc.properties"></context:property-placeholder><!-- 注入数据源 --><bean id"dataSource" class"com.mchange.v2.c3p0.ComboP…

HPA 与pod调度

HPA 自动更新工作负载资源&#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自动扩缩工作负载以满足需求。 绑定到deploy上&#xff0c;控制pod 依托于metrics-server HorizontalPodAutoscaler 水平pod自动扩缩&#xff1a;意味着对增加的负…

C语言实现单链表

一、什么是单链表 1.链表就是一种在物理存储上各个节点非连续的&#xff0c;随机的&#xff0c;元素的逻辑顺序是通过链表中的指针链接的次序而实现的。 图示&#xff1a; 二、单链表中节点的定义 #include<stdio.h> #include<stdlib.h> #include<string.h>…

机械学习—零基础学习日志(数学基础汇总2)

零基础为了学人工智能&#xff0c;正在艰苦的学习 我比较推荐&#xff0c;《三个月从零入门深度学习&#xff0c;保姆级学习路线图》的整体学习思路&#xff0c;但因为数学基础太差&#xff0c;而且针对所需的数学系统知识&#xff0c;我依然没有很明确的学习方向。 所以直接使…

高性能日志系统 日志格式化输出逻辑

概述 日志消息是由许多要素组成&#xff0c;而日志格式化的主要作用&#xff0c;即是对日志消息进行格式化&#xff0c;组织成自己指定好的字符串结构 总体架构 日志消息&#xff08;LogMsg&#xff09; 用于存储各种日志信息&#xff0c;例如存储日志的级别、时间、行号等信息…

Summernote 富文本编辑器的内容变成只读模式

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

【安卓】动态加载布局技巧

文章目录 使用限定符常见限定符 使用最小宽度限定符 使用限定符 修改FragmentTest项目中的activity_main.xml文件 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"horizontal"android:layout_width&quo…

JavaScript constructor原型原型继承

constructor 在 JavaScript 中&#xff0c;构造函数是一种特殊的函数&#xff0c;使用 new 关键字来调用&#xff0c;用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。 例如&#xff1a; function Person(name, age) {this.name name;this.age a…

4.MySQL数据类型

目录 数据类型 ​编辑数值类型 tinyint类型 bit类型 float类型 decimal类型 字符串类型 char类型 varchar varchar和char的区别 日期和时间类型 数据类型 数值类型 说明一下&#xff1a;MySQL本身是不支持bool类型的&#xff0c;当把一个数据设置成bool类型时&#x…

C#复习之封装_构造函数,析构函数,垃圾回收

知识点一&#xff1a;构造函数 基本概念 在实例化对象时 会调用的用于初始化的函数 如果不写 默认存在一个无参构造函数 构造函数的写法 1.没有返回值 2.函数名和类名必须相同 3.没有特殊需求时 一般都是public的 4.构造函数可以被重载 5.this代表当前调用该函数的对象自己 注…

【多线程】synchronized原理

文章目录 一、锁升级 (面试经常考)偏向锁 二、锁消除三、锁粗化锁的粒度 四、相关面试题 结合 锁策略&#xff0c;我们就可以总结出&#xff0c;synchronized具有以下特性&#xff1a; 乐观悲观&#xff0c;自适应重量轻量&#xff0c;自适应自旋挂起等待&#xff0c;自适应非…

Gradio 快速开发网页应用

Gradio 是一个开源的 Python 框架&#xff0c;可以快速开发页面&#xff0c;Gradio 主要用于 AI 模型 Demo 的开发&#xff0c;通过几行代码可以快速生成一个 Web Demo&#xff0c;由于 AI 算法工程师使用的都是 Python 语言&#xff0c;使用 Python 开发 Demo 会相对简单&…