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)




Unity3D 简单水面shader的实现 实现思路 今天来实现一个简单的水面效果。水面的话主要是以下几个效果叠加 1.水面的动态波浪效果,我们这里使用最简单的正弦波加上法线贴图来模拟。如果想要更精确的波动效果可以考虑使用Gerstner波 2.不同水深颜色不同的效果,使用该顶点深度和顶点坐标的差值来计算深度,然后映射到颜色 3.浪涌效果,还是根据顶点深度和顶点坐标的差值来计算深度,然后叠加上一层浪涌 4.折射效果,用grabpass,采样之后进行偏移,最后叠加上去。 代码实现 首先是顶点位移函数,使用正弦函数代入顶点的x坐标和z坐标来算,因为这里写 阅读详情

相关推荐

AI智能体赋能Cypress:自动化前端测试的新范式

自动化测试是现代软件工程保障质量的核心实践,其原理是通过脚本模拟用户操作,对软件功能进行验证。随着大语言模型(LLM)和智能体(Agent)技术的发展,测试自动化正迈向智能化新阶段。智能体能够理解自然语言描述的测试需求,并自主规划、执行测试步骤,这为应对前端UI频繁变更、测试用例维护成本高等挑战提供了新思路。在工程实践中,将Cypress这一流行的前端测试框架封装为智能体可调用的标准化技能(Skill),是实现这一愿景的关键。通过设计清晰的交互协议和状态管理机制,智能体可以像人类测试工程师一样“感知”页面状

weixin_33726318的博客 686

一张图看懂JVM

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

方志朋的博客 124

解决windows10下无法安装.net framework 3.5(包括.net2.0和3.0)

入域电脑,win10系统中安装 .net framework 3.5(包括.net2.0和3.0)

God_me_1的博客 4万+

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万+

Oracle Patch清理

- opatch clean的帮助,该命令清除.patch_storage directory文件夹下的'restore.sh,make.txt' files and 'scratch,backup'-- 执行完毕后,貌似没有变化,可能和自己环境有关(19年开始测试补丁,基本上每个季度都测试,后面把又把数据库用RMAN做了迁移,又转换成了PDB模式)。在对Oracle安装补丁后,会发现OS上被占用了大量的空间,本文档清理Opatch过程中的一些文件,释放空间。--清理后空间,剩余25G。

文档搬运工 1072

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 458

JVM笔记(一)

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

qq_45420103的博客 298

Ubuntu 24.04下Loki+Alloy+Grafana日志分析系统的快速部署与实践

本文详细介绍了在Ubuntu 24.04系统上快速部署Loki+Alloy+Grafana轻量级日志分析系统的完整流程。通过二进制安装Loki、配置Alloy采集器以及设置Grafana可视化界面,构建了一套资源消耗低、易于管理的日志解决方案,并实战演示了如何采集和分析网络设备日志,特别适合资源有限的中小团队或边缘计算场景。

tensor9flow的博客 234

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万+

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度!

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! (以YOLO26最新目标检测模型为基础,利用LSKNet替代Backbone)

2502_91881744的博客 211

IEC61850规约客户端软件开发实战(第六章)

IEC 61850标准中的GOOSE(Generic Object Oriented Substation Event,面向通用对象的变电站事件)功能是变电站自动化系统的核心通信机制,主要用于实现智能电子设备(IED)间高可靠性、低延时的实时信号传输。本章简述其核心功能与技术特点。

半青年的博客 1778

一图看完jvm理论篇

piaoweimei的博客 147

SAP 系统中的数字签名解决方案及应用案例分析

在当前企业信息化及数字化转型的大背景下,数据安全与身份认证显得尤为重要。数字签名技术作为保障数据真实性和完整性的重要手段,在 SAP 系统中得到了广泛应用。本文将详细探讨 SAP 系统中部分应用场景如何利用数字签名技术满足业务需求,涵盖 SAP Single Sign-On、质量管理、过程工业生产计划以及 SAP ArchiveLink 内容服务器等方面,力求通过深入解读,帮助读者更好地理解和应用这一关键技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 527

一、 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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【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

WINCC7.3破解文件

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

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

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

一路向前! 4746

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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、付费专栏及课程。

余额充值