`

jvm学习笔记

    博客分类:
  • JAVA
阅读更多

学习笔记

HotSpot不区分虚拟机栈和本地方法栈,所以-Xoss参数(设置本地方法栈大小)虽然存在但是无效。
栈容量只由-Xss参数设定
StackOverflowEror:线程请求深度大于虚拟机所允许的最大深处
OutOfMemoryError:虚拟机在扩展栈是无法获取足够的内存空间

-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError

 

 

demo

/**
 * -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
 * 设置设置最小和最大内存。当出现内存溢出是Dump出堆转内存的快照
 */
public class HeapOOM {

 static class OOMObject{
  
 }
 public static void main(String[] args) {
  List<OOMObject> aa = new ArrayList<OOMObject>();
  while(true)
   aa.add(new OOMObject());
 }
}

 

/**
 * 虚拟机栈和本地方法栈OOM(OutOfMemeroyError)测试
 * java -Xss128k JavaVMStackSOF 设置栈内存大小
 */
public class JavaVMStackSOF {

 private int stackLength = 1;
 public void stackLeak(){
  stackLength++;
  stackLeak();
 }
 public static void main(String[] args) {
  JavaVMStackSOF test = new JavaVMStackSOF();
  try{
   test.stackLeak();
  }catch(Throwable e){
   System.out.println(test.stackLength);
   e.fillInStackTrace();
  }
 }
}

 

/**
 * -XX:PermSize=10M -XX:MaxPermSize=10M
 设置方法区的大小。常量区分配在方法区,故限制方法区的大小就限制了方法区的大小
 * Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
        at java.lang.String.intern(Native Method)
        at RuntimeConstantPoolOOM.main(RuntimeConstantPoolOOM.java:11)
        常量区内存溢出
 */
public class RuntimeConstantPoolOOM {

 public static void main(String[] args) {
  List<String> aa = new ArrayList<String>();
  int i = 0;
  while(true){
   aa.add(String.valueOf(i++).intern());
  }
 }
}

public static void main(String[] args) {
  /**
   * bootstrap classloader - 引导(也称为原始)类加载器,它负责加载Java的核心类。
   * 在Sun的JVM中,在执行java的命令中使用-Xbootclasspath选项或使用-D选项指定sun.boot.class.path系统属性值可以指定附加的类。
   * 这个加载器的是非常特殊的,它实际上不是java.lang.ClassLoader的子类,而是由JVM自身实现的。
   * 大家可以通过执行以下代码来获得bootstrap classloader加载了那些核心类库
   */
  URL[] urls=sun.misc.Launcher.getBootstrapClassPath().getURLs();
  for (int i = 0; i < urls.length; i++) {
   System.out.println(urls[i]);
  }
 }

分享到:
评论

相关推荐

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    java之jvm学习笔记五(实践写自己的类装载器)

    这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...

    JVM学习笔记

    ### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...

    JVM学习笔记.docx

    本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

    java之jvm学习笔记十一(访问控制器)-源码

    本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...

    JVM学习笔记(缓慢更新).md

    JVM学习笔记(缓慢更新).md

    JVM学习笔记2018-4-151

    本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...

    JVM 学习笔记(Java虚拟机)

    **JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...

    JVM学习笔记核心知识点整理

    ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

    java之jvm学习笔记十一(访问控制器) -源码

    本文将深入探讨JVM中的访问控制器,并通过分析"java之jvm学习笔记十一(访问控制器) -源码"中的`MySecurityManager`来进一步理解其工作原理。 访问控制器的主要任务是对类、方法和字段的访问进行限制,防止恶意代码...

    Java8 Jdk JVM学习笔记、jdk1.8、SpringBoot、内存与垃圾回收、类加载子系统、运行时数据区、本地方法等

    Java8 Jdk JVM学习笔记、jdk1.8、SpringBoot; 主要内容为 JVM 内存与垃圾回收、类加载子系统、运行时数据区、本地方法等。适合开发1-3年想对JVM学习的同学。 在之后的开发中,更加详细的了解JVM,可以进行JVM问题...

    jVM学习笔记.ppt

    JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...

    jvm学习笔记.zip

    《深入理解JVM:垃圾回收与优化》 在Java编程领域,JVM(Java Virtual Machine)扮演着至关重要的角色,它是Java程序...开发者需要不断学习和实践,才能在实际项目中有效地配置和优化JVM,确保程序的高效稳定运行。

    JVM 学习笔记

    NULL 博文链接:https://cooldatabase.iteye.com/blog/634599

    jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

    在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...

    java之jvm学习笔记八(实践对jar包的代码签名)

    Java的JVM(Java Virtual Machine)是Java程序运行的基础,它负责解释和执行字节码。在实际开发中,为了确保代码的安全性、完整性和防止恶意篡改,我们需要对Java的JAR(Java Archive)包进行代码签名。本文将深入...

    java之jvm学习笔记九(策略文件)

    在JVM的学习过程中,策略文件是一个重要的环节,它主要用于安全管理,控制不同代码的权限。本篇笔记将深入探讨Java策略文件的概念、结构以及如何使用。 策略文件是Java安全模型的一部分,它定义了哪些代码可以执行...

    java之jvm学习笔记十二(访问控制器的栈校验机制)

    本篇学习笔记将深入探讨这一主题,主要关注Java字节码的执行过程以及如何通过栈校验来防止非法操作。 Java字节码是由Java编译器生成的中间代码,它在JVM上运行前会经过类加载器的验证,其中栈校验是验证的一部分。...

Global site tag (gtag.js) - Google Analytics