java 简化判断_简化Java内存分析

java 简化判断

作为一名典型的Java开发人员,除了遵循关闭连接,流等典型的最佳实践外,我从未监视过应用程序的内存使用情况。最近,我们在JBoss服务器中遇到了一些问题,不得不深入研究内存管理Java中最好的事情之一是,创建对象时,不需要开发人员处理内存分配。 JVM为我们做到了。 大多数时候,我们只需要堆内存和垃圾收集器的外层知识。 我将分享一些非常有趣的调查。 我是一个巨大的话题,我是从Web应用程序开发人员的角度写的,我认为我们应该了解的所有最低要求。 工具

有许多不错的工具可用于剖析Java应用程序,其中一些是,

1. 您的套件Java Profiler
2. JProfiler
3. Eclipse MAT 4. 可视VM

其中,您的Kit和JProfilers需要许可证,其他则可以免费使用产品。 我们将使用VisualVM。 它是一个简单但功能强大的工具,并捆绑在JDK中。 它具有可下载和使用的插件功能列表。 要开始使用VisualVM,请转到<JDK_HOME> \ bin并运行jvisualvm.exe 。 我发现以下文章对继续学习很有用。

1. 使用VisualVM进行分析
2. VisualVM性能调整工具
3. 如何在不崩溃的情况下获取VisualVM来配置JBoss

由于我们在这里讨论内存,因此请确保按照本文所述,在VisualVM上安装Visual GC插件。

设置阶段– JVM内存结构

JVM内存分为三部分,如下图所示。 在我们的应用程序中,我们关注堆内存。 我们可以使用参数将此值输入到JVM,

-Xmx <size> –设置最大Java堆大小
-Xms <size> –设置初始Java堆大小

非堆内存存储每个类的结构,例如运行时常量池,字段和方法数据,以及方法和构造函数的代码以及内部字符串。

这是一篇不错的文章,其中包含有关JVM内存大小的更多详细信息。 在这里阅读Javin关于JVM堆空间的文章。

一种常见的混淆是关于堆栈内存和堆内存 。 此处对此进行了很好的解释。堆栈值仅存在于创建它们的函数的范围内。一旦返回,它们将被丢弃。 Java仅将原语存储在堆栈中。 这样可使堆栈变小,并有助于使各个堆栈帧变小,从而允许更多的嵌套调用。 对象是在堆上创建的,并且只有引用(即原语)在堆栈上传递。

现在,让我们变得真实。 在Visual GC的图像下方给出,这是前面提到的VisualVM内部的一个插件。 我们在这里看到许多图表,在这里可以找到输出的详细描述。

游戏开始–应用程序运行时会发生什么

创建对象时,它们位于Eden内部。 运行垃圾收集器(GC)时,如果对象已死(意味着它们不是活动引用),则将其清除,否则将其移至S1 (生存空间1)或S2 这称为GC循环。 内部GM算法确定GC循环的频率。 堆内存的Eden + S1 + S2部分称为Young generation。 在固定数量的GC循环中幸存下来的对象将移入Old Gen空间。 大多数Java对象死于婴儿,并且永远都不会到达OldGen。这通常包括局部变量,这些局部变量在方法执行后会刷新。

老一代内部的GC循环频率要比年轻一代少得多。老一代对象的典型示例是单例,缓存的对象和其他应用程序广泛使用的数据。

当事情没有按照计划进行时

在典型的应用中,Old Gen空间内部的变化较小。 如果即使在GC循环之后,Old Gen空间也随着时间线性增长,则将导致OutOfMemoryError。 这可能表明代码内部存在内存泄漏。 但是,我们可能需要使用探查器来找出造成这种情况的确切原因。 这是Dzon上有关Java EE企业性能问题的某些原因的文章。

这些是执行应用程序时JVM内存的组织方式和响应方式的基本构建块。 从这一点开始,有很多主题,包括调整内存参数和垃圾收集器。 我将添加一些与此相关的有用资源。

1. Java性能调优,性能分析和内存管理
2. InfoQ演示:诊断Web应用程序内存不足错误
3. InfoQ演示:我所学到的有关JVM性能调整@twitter的一切 4. InfoQ演示:高性能Java 5. Java理论与实践:垃圾收集与性能

参考: Java内存概要分析(来自JCG合作伙伴 Manu PK)在“面向对象的生活”博客中简化 。


翻译自: https://www.javacodegeeks.com/2012/09/java-memory-model-simplified.html

java 简化判断

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

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

相关文章

DRF的序列化组件

rest rest下的url url唯一代表资源&#xff0c;http请求方式来区分用户行为 url的设计规范 GET&#xff1a; 127.0.0.1:9001/books/       # 获取所有数据 GET: 127.0.0.1:9001/books/{id}      # 获取单条数据 POST&#xff1a; 127.0.0.1:9001/books/      # 增…

15crmo焊接后多长时间探伤_承压设备渗透探伤检测方法简单操作思路

啥是渗透检测渗透检测俗称渗透探伤&#xff0c;是一种以毛细管作用原理为基础用于检查表面开口缺陷的无损检测方法。它与射线检测、超声检测、磁粉检测和涡流检测一起&#xff0c;并称为5种常规的无损检测方法&#xff0c;渗透检测始于本世纪初&#xff0c;是目视检查以外最早应…

SpringBoot实战(五)之Thymeleaf

Thymeleaf同jsp、volocity、freemarker等共同的职能是MVC模式中的视图展示层&#xff0c;即View。 当然了&#xff0c;SpringBoot中也可以用jsp,不过不推荐这种用法&#xff0c;比较推崇的就是使用Thymeleaf。 关于Thymeleaf学习&#xff0c;建议参考官方文档:https://www.thym…

Arrays.sort()

今天在做一个按更新时间搜寻出某个文件夹里面的所有文件&#xff0c;由于自己写算法比较花费时间&#xff0c;干脆就用j2se提供的类Arrays提供的sort&#xff08;&#xff09;方法&#xff0c;这样就比较省力。对于基本数据类型只要Arrays.sort(数组)[“注&#xff1a;数组是声…

Thymeleaf 3 – Thymeleaf 3和Spring MVC快速入门

Thymeleaf 3发布到达。 新版本带来了许多新功能&#xff0c;例如HTML5支持以及不带标记的文本模板支持– [# th:utext"${thymeleaf.version}" /] &#xff0c;改进的内联功能– <p>Thymeleaf [[${thymeleaf.version}]] is great!</p> &#xff0c;性能改…

rmi远程代码执行漏洞_【最新漏洞简讯】WebLogic远程代码执行漏洞 (CVE202014645)

↑ 点击上方“SecMind安全管家”关注我们 情报编号&#xff1a;W1120200715漏洞概述WebLogic是Oracle公司出品的用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器&#xff0c;全球使用广泛。WebLogic的远程方法调用RMI通信使用T3协议&#…

python 的内存回收,及深浅Copy详解

一、python中的变量及引用1.1 python中的不可变类型&#xff1a;数字(num)、字符串(str)、元组(tuple)、布尔值(bool<True,False>) 接下来我们讲完后你就懂了为什么它们是不可变对象了。 都知道python中一切都是对象&#xff0c;而变量就是这些对象的引用&#xff0c;什么…

不是技术牛人,如何拿到国内IT巨头的Offer

不久前&#xff0c;byvoid面阿里星计划的面试结果截图泄漏&#xff0c;引起无数IT屌丝的羡慕敬仰。看看这些牛人&#xff0c;NOI金牌&#xff0c;开源社区名人&#xff0c;三年级开始写Basic...在跪拜之余我们不禁要想&#xff0c;和这些牛人比&#xff0c;作为绝大部分技术屌丝…

layui列表筛选列_Shopify搜索产品并筛选产品列表功能介绍

搜索产品并筛选产品列表 您的所有产品都列在 Shopify 的产品区域中。每个页面列出 50 种产品。要整理产品列表&#xff0c;并在跨多个页面的列表中查找产品&#xff0c;您可以对列表进行排序、搜索和筛选。默认情况下&#xff0c;产品列表按产品名称的字母顺序(从 A 到 Z)进行排…

远程调用 quartz_如何远程管理Quartz

远程调用 quartz选项1&#xff1a;JMX 许多人问他们是否可以通过JMX管理Quartz&#xff0c;但我不确定为什么Quartz doc甚至不会提及它。 是的&#xff0c;您可以使用quartz.properties的以下命令启用石英中的JMX org.quartz.scheduler.jmx.export true之后&#xff0c;您可以…

DOM解析器

1.DOM标准 DOM&#xff08;Document Object Model&#xff0c;文档对象模型&#xff09;是W3C制定的一套规范标准&#xff0c;即规定了解析文件的接口。各种语言可以按照DOM规范去实现这些接口&#xff0c;给出解析文件的解析器。 各种基于DOM规范解析器必须按照DOM规范在内…

批量打印pdf并合并_批量打印CAD图(无删减版)

前面两期小编出的PDF教程想必用了的人都觉得还不错吧&#xff1f;(此处应有掌声)上一期提到的CAD批量打印今天放出来了&#xff0c;擦亮眼睛往下看很多时候大批量的一堆图纸要输出&#xff0c;比如下面这个当然这批图纸并不多&#xff0c;也只是局部的&#xff0c;通常一个项目…

expect详解及自动登录脚本的实现

expect可以让一些交互的任务自动完成&#xff0c;我们可以将一些交互过程写入脚本&#xff0c;ssh登录就是一个简单的实现&#xff0c;下面将介绍expect的用法。 1 安装 yum install -y expect 2 语法介绍 expect - send 这两个指令会配合使用&#xff0c;当expect接收到一个和…

极端懒惰:使用Spring Boot开发JAX-RS服务

我认为可以公平地说&#xff0c;作为软件开发人员&#xff0c;我们一直在寻找编写较少代码的方法&#xff0c;这些方法可以自动完成或不能自动完成更多工作。 考虑到这一点&#xff0c;作为Spring产品组合的骄傲成员的Spring Boot项目破坏了传统方法&#xff0c;极大地加快了并…

透明怎么弄_最新版微信如何设置透明背景?这样设置,效果令人惊喜

微信叒更新了&#xff0c;你的微信有更新吗&#xff1f;听说这次更新是安卓端的先更新&#xff0c;苹果端的还不能更新。今天小编要跟大家分享的是新版微信应该如何设置透明背景&#xff0c;不清楚微信透明背景长什么样子的&#xff1f;没关系&#xff0c;给你看看设置透明背景…

QueryRunner使用

在相继学习了JDBC和数据库操作之后&#xff0c;我们明显感到编写JDBC代码并非一件轻松的事儿。为了帮助我们更高效的学习工作&#xff0c;从JDBC的繁重代码中解脱出来&#xff0c;老佟给我们详尽介绍了一个简化JDBC操作的组件——DBUtils。我们今天主要学习了它所提供的两个类和…

基于vue的UI框架集锦(移动端+pc端)

1. vonic 一个基于 vue.js 和 ionic 样式的 UI 框架&#xff0c;用于快速构建移动端单页应用&#xff0c;很简约&#xff0c;是我喜欢的风格 star 2.3k 中文文档 在线预览 2.vux 基于WeUI和Vue(2.x)开发的移动端UI组件库 star 10k 基于webpackvue-loadervux可以快速开发移动端页…

com技术内幕 代码_CFan科学院:零门槛极速抠图技术探秘

将照片中的人或物从背景中分离出来&#xff0c;俗称抠图。要实现完美的抠图&#xff0c;没有一定的PS(Photoshop)基础是根本无法实现的&#xff0c;不过现在有个名为Remove.bg的网站&#xff0c;号称5秒钟就可以完成复杂的抠图&#xff0c;彻底将抠图难度降到了零门槛&#xff…

关于级联删除和级联修改

曾经因为级联删除的问题浪费了N多时间&#xff0c;顾此在这里写下小小心得&#xff0c;供大家借鉴。在数据库分别建立表t_food&#xff08;菜单&#xff09;和表t_book(订单)&#xff0c;如下所示&#xff1a;t_food:————————————————————————————…

python:数据库连接操作入门

模块 1 import pymssql,pyodbc 模块说明 pymssql和pyodbc模块都是常用的用于SQL Server、MySQL等数据库的连接及操作的模块&#xff0c;当然一些其他的模块也可以进行相应的操作&#xff0c;类似adodbapi、mssql、mxODBC等&#xff0c;我们在实际用的时候选择其中一个模块就好&…