JVM【一】

JVM(一) JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。机器码是由二进制编码表示的计算机指令。每个机器码通常对应一个特定的操作,如加法、乘法、跳转等。机器码是计算机能够直接执行的代码,它可以在计算机的内存中存储和执行。计算机通过将机器码加载到CPU中执行,进行各种操作和运算。机器码是计算机的最底层指令,它由一系列的二进制位组成,每个位表示不同的含义,如操作码、寄存器地址、内存地址等。字节码需要在JVM中解释执行,相比直接翻译成机器码会有一定的性能损失,但是优点所带来的好处使得Java在跨 阅读详情
package cn.sp.test03;

import java.util.ArrayList;
import java.util.List;
/**
 * JVM堆内存溢出
 * @author 2YSP
 *
 */
public class TestOOM {
	static class OOMObject{
		
	}
	public static void main(String[] args) {
		List<OOMObject> list=new ArrayList<OOMObject>();
		while(true){
			
			list.add(new OOMObject());
		}
	}
}
当程序不断的new一个对象,GC却来不及回收的时候,就会造成内存溢出。抛出如下异常。
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid8292.hprof ...
Heap dump file created [27869904 bytes in 0.155 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.Arrays.copyOf(Unknown Source)
	at java.util.ArrayList.grow(Unknown Source)
	at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
	at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
	at java.util.ArrayList.add(Unknown Source)
	at cn.sp.test03.TestOOM.main(TestOOM.java:18)
package cn.sp.test03;
/**
 * 虚拟机栈溢出
 * @author 2YSP
 *
 */
public class TestOOM2 {
	static int stackIndex = 0;
	
	public void testStackOverFlow(){
		stackIndex++;
		/*int str = 12;
		int str2 = 12;
		int str3 = 12;
		int str4 = 12;
		int str5 = 12;
		int str6 = 12;
		int str7 = 12;
		int str8 = 12;*/

		testStackOverFlow();
	}
	public static void main(String[] args) throws Throwable {
		try {
			TestOOM2 oom=new TestOOM2();
			oom.testStackOverFlow();
		} catch (Throwable e) {
			System.out.println("堆栈深度(迭代次数):"+stackIndex);
			throw e;
		}
		
	}

}
一个方法无限调用自身的话,就会栈溢出,同时抛出以下异常。
堆栈深度(迭代次数):984
Exception in thread "main" java.lang.StackOverflowError
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:11)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)



如果我们把注释部分去掉,再运行一次就会发现,栈深度更少了,这是因为变量也占用了内存。
堆栈深度(迭代次数):577
Exception in thread "main" java.lang.StackOverflowError
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:11)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)
	at cn.sp.test03.TestOOM2.testStackOverFlow(TestOOM2.java:21)




Appstore 3.2(f)违规自救指南:从触发到申诉的完整应对策略 本文详细解析了Appstore 3.2(f)违规的应对策略,从触发原因到申诉流程,帮助开发者有效自救。文章涵盖隐瞒行为、账户关联和信息造假三大违规场景的判定逻辑,并提供申诉信写作的黄金法则和长期合规防御措施,确保开发者能够顺利通过苹果审核。 阅读详情

相关推荐

【超详细】数据分析笔试题分享,可以收藏后仔细阅读_数据分析岗位笔试题目

这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。15、在某座城市出现了某种流行病,且已知某座城市男女人数相同,男性患该病的概率为5%,女性为0.25%,现已知该城市的小明得了此病,请问小明为男性的概率是() B。D项,使用方差作为特征评分标准,如果某个特征的取值差异不大,通常认为该特征对区分样本的贡献度不大,因此在构造特征过程中去掉方差小于阈值的特征。LTV,用户生命周期价值,是产品从用户获取到流失所得到的全部收益的总和。

2401_89824744的博客 948

一张图看懂JVM

在上一版文章发出后,作者收到了很多朋友的反馈,有反馈图片不清晰的,也有反馈说内存部分画的不是太细、缺少必要的文字描述,在这里小码农要向这些朋友表示抱歉,同时也向这些朋友表示感谢,正是因为有...

方志朋的博客 124

复现HumanMAC(HumanMAC: Masked Motion Completion for Human Motion Prediction)

Human3.6M和HumanEva-I都放到data目录下(记得将data_multi_modal-20250320T022408Z-001.zip和humaneva_multi_modal-20250320T022412Z-001.zip解压缩并且分别重命名为data_multi_modal和humaneva_multi_modal)。生成的gif存放在inference目录下zero_shot_<INDEX>下的out目录下。新建一个data目录,将

qq_52643100的博客 831

JVM原理(一)JVM通识、JVM架构

一、初识JVM 1.1 学习JVM的目的 面试重灾区,我们必须搞懂它。 生产过程中,肯定会面临JVM调优相关问题,需要也必须搞懂它。 打基础,想搞懂我们java赖以生存的环境长什么样子,提升对Java知识点的理解。 1.2 JVM基本常识 1.2.1 为什么使用JVM 看下面这个图: 可以看到JVM帮我们屏蔽了操作系统。 与C语言的区别: C语言可以直接编译成机器码,但是编译机器码时需要知道目标操作系统,windows操作系统机器码编译之后是无法在linux系统上执行 即C语言多次运行不同的操作系

语雀同名:犬豪 yuque.com/qhao 1万+

小白的MatSWMM使用心路(二)——用matlab修改INP文件参数/使用matlab查找txt内容并修改多行内容

说是修改inp,但是里面的内容大部分还是讲怎么修改txt的……(?)。包含如何找到需要的参数(关键字)位置,以及修改那个位置的txt这样的内容。希望能帮助大家吧……Matlab你要多出好用的功能啊!

weixin_44276743的博客 4530

【最全】ISTQB- FL模拟题(含答案)

汇总收集的所有ISTQB基础级考题和答案

maoxuexue的博客 1万+

JVM笔记(一)

首先我们要了解虚拟机的具体定义,我们所接触过的虚拟机有安装操作系统的虚拟机,也有我们的Java虚拟机,而它们所面向的对象不同,Java虚拟机只是面向单一应用程序的虚拟机,但是它和我们接触的系统级虚拟机一样,我们也可以为其分配实际的硬件资源,比如最大内存大小等。

qq_45420103的博客 298

手把手教你用ET-BERT预训练模型搞定加密流量分类(附完整代码)

本文详细介绍了如何使用ET-BERT预训练模型实现加密流量分类,包括环境配置、数据预处理、模型微调及优化策略。通过实战代码示例,帮助开发者快速掌握这一技术,提升网络安全领域的加密流量分析能力。

weixin_29166013的博客 493

Jvm系列-Jvm概述(一)

目录 1,什么是JVM? 2,JVM跨平台及原理 3,JVM的分类 4,JVM的位置 5,JVM的体系结构 6,Java代码的执行流程 7,JVM的架构模型 8,JVM的生命周期 9,三大商业虚拟机 1,什么是JVM? JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机。 jvm是运行在操作系统之上的,与硬件没有任何关系。 2,JVM跨平台及原理 跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行。 原理:编译之后的字节码

理科男同学 5万+

从桨叶设计到电机匹配:手把手教你调出无人机最佳动力组合

本文系统介绍了无人机动力系统的核心匹配原则,重点解析了如何通过测试与数据分析,优化螺旋桨与电机的组合,从而显著提升系统力效与续航。文章提供了从参数解读、实战测试到深度调优的完整指南,帮助开发者解决电机过热、推力不足等常见问题,实现无人机性能最大化。

weixin_29305313的博客 236

解锁VS2022!手把手教你本地部署Deepseek

在 VS2022 中本地部署 Deepseek,我们首先需要确保硬件资源的充足,如高性能的 GPU、大容量内存和高速存储等,这是模型稳定运行的基石。如果生成的摘要能够准确概括原文的核心内容,就表明 Deepseek 模型在文本分析方面的功能正常,部署稳定可靠。这对于开发者来说,能够大大提高开发效率,当遇到一些常见的功能实现时,可以借助 Deepseek 模型快速生成基础代码框架,减少手动编写的工作量。在大语言模型的蓬勃发展的当下,Deepseek 凭借其卓越的性能和创新的技术,已然成为该领域的佼佼者。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1万+

一图看完jvm理论篇

piaoweimei的博客 147

华为OD机试真题 新系统 9月27号 【数据中心最佳维护窗口】

华为OD机试真题 新系统【数据中心最佳维护窗口】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数据中心最佳维护窗口】多语言题解。

qq_45776114的博客 1154

一、 JVM简介

JVM简介什么是JVM常见的JVMJava内部体系结构JVM位置JVM架构图JVM架构模型JVM生命周期虚拟机的启动虚拟机的执行虚拟机的退出 什么是JVM 运行编译好的Java文件生成的 .class 文件,并解析为当前运行系统所对应的指令. Java程序的跨平台性主要指字节码文件可以在任何具有Java虚拟机的计算机或电子设备上运行,Java虚拟机中的Java解释器复制将字节码文件解释成特定的机器码进行运行. 常见的JVM SUN Classic Exact VM HotSpot VM : HotSpot

始末丶Yzx的博客 205

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【JVM篇】一、初识JVM

【JVM篇】一、初识JVM 01 JDK JRE JVM JDK(Java Development Kit): 是针对Java开发程序员的产品,包含了Java运行环境JRE,Java工具和Java基础类库。 JRE(Java Runtime Environment):运行Java程序所必须的环境的集合,包含JVM标准实现以及Java核心类库。 JVM(Java Virtual Machine):是整个Java实现跨平台的最核心的部分。所有的Java程序首先会被编译成.class的类文件,这种类文件可以在

Mind_programmonkey的博客 749

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【JVM】JAVA虚拟机总结(一)——什么是JVM

前言:Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM——Java Virtual Machine(Java虚拟机)。执行Java程序的两个步骤:由Java语言编写的程序需要进过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(*.class文件)。这种字节码不是可执行的,必须使用Java解释器来解释执行。所有Java语言既不是纯粹的编译型语言,也...

一路向前! 4746

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JVM优化一:JVM参数

JVM优化一:参数 1、JVM优化 对于普通开发人员来说,JVM调优是个陌生的话题.毕竟,大家平常的工作中,基本上就是只负责代码的开发,甚至有的只是负责某个应用中某一功能的开发. 不过呢,虽然现在工作上遇不到,但是万一遇到的时候,别人不会,你会呢?所以,还是要可以学一下的 为什么JVM要优化?简单来说是为了让我们开发的应用使用起来更稳定,跟顺畅.更直白点的话,就是JVM的资源是有限的,而应用产生的数据是无限的.我们需要将无限的数据放到有限的容器中.所以,我们就需要对有限的资源进行优化. 2、JVM的运行..

不善言谈者 776

JVM上篇(一、JVM_Java 及 JVM简介)

JVM(jdk 1.8) 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! JVMJVM(jdk 1.8)一. 前言二. Java 及 JVM简介1.虚拟机介绍2.JVM架构模型3.JVM 生命周期4.JVM发展三. 类加载子系统1.类加载器及加载过程:1.1加载过程1.2类加载器2.双亲委派机制2.1双亲委派机制2.2双亲委派优势2.3沙箱安全机制3.其他四.运行时数据区1.基础知识2.程序计数器(PC寄存器)2.1 PC Register介绍2.2 PC Register举例2.

weixin_43695916的博客 1371

JVM介绍一

什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。目前主流的虚拟机有: 虚拟机名称 介绍 HotSpot Oracle/Sun JDK和OpenJDK都使用HotSPot VM的相同核心 J9 J9是IBM开发的高度模块化的JVM JRockit JRockit 与 HotSpot 同属于 Oracle,目前为止 Oracle 一直在推

qq_35873436的博客 1420

一张图了解JVM虚拟机

收一张图…

昨夜星辰昨夜风,画楼西畔桂堂东 157

JVM中的实验一

实验1: GC回收 /** * @author liangliang * @date 2020/12/20 20:14 * @e-mail 1640432919@qq.com */ public class Test1 { public final int SIZE = 10 * 1024 * 1024; /** * buffer占据的空间不会被释放,主要原因是局部变量表中的最大槽数为2,第二个槽指向了buffer */ public void .

小熊的博客 184

JVM系列之初识JVM《一》

Java的跨平台性 Java中提到跨平台,想到的是JVM,但是能跨平台的是Java程序,而不是JVM。JVM是用C/C++开发的,是编译后的机器码,是不能跨平台,不同的平台需要安装不同版本的JVM编写的Java文件,编译之后生成.class文件,称之为字节码文件,Java虚拟机(JVM)负责将字节码文件翻译乘法特定平台的机器码后才能运行。即只要在不同的平台上安装对应的JVM,然后运行字节码文件,即运行Java程序 在这个过程中,编写的Java程序没有改变,仅仅是通过JVM这个中间层,就能在不同的平台上运

weixin_45923633的博客 237

JVM总结一

JVM基础知识 Java的跨平台性 注意:我们提到Java的跨平台性,就会想到JVM,但是能跨平台的是 Java 程序,而不是 JVM。JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 JVM 我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。Java 虚拟机(JVM)就是负责将字节码文件翻译成特定平台下的机器码然后运行,也就是说,只要在不同平台上安装对应的 JVM,就可以运行字节码文件,即运行我们编写的 Java 程序。 而这个过

qq_52840805的博客 244

JVM笔记(一)走进JVM

走进JVM JVM相对于Java应用层的学习难度更大,**开篇推荐掌握的预备知识:**C/C++(关键)、微机原理与接口技术、计算机组成原理、操作系统、数据结构与算法、编译原理(不推荐刚学完JavaSE的同学学习),如果没有掌握推荐的一半以上的预备知识,可能学习起来会比较吃力。 **本套课程中需要用到的开发工具:**CLion、IDEA、Jetbrains Gateway 此阶段,我们需要深入探讨Java的底层执行原理,了解Java程序运行的本质。开始之前,推荐各位都入手一本《深入理解Java虚拟机 第三版

qq_25928447的博客 3680

一、jvm入门基础

java编译到执行 跨平台语言到跨语言的平台 常见的jvm实现 jdk jre jvm关系 Class File Format

weixin_45370502的博客 650
上一篇: HttpClient【一】
下一篇: webService【一】
2YSP
博客等级 码龄10年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值