网站目录怎么做301跳转,用asp制作一个简单的网站,成都微信小程序制作公司,推广网址java 简化判断作为一名典型的Java开发人员#xff0c;除了遵循关闭连接#xff0c;流等典型的最佳实践外#xff0c;我从未监视过应用程序的内存使用情况。最近#xff0c;我们在JBoss服务器中遇到了一些问题#xff0c;不得不深入研究内存管理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.htmljava 简化判断