jvm学习笔记

学习笔记

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]);
  }
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值