zoukankan      html  css  js  c++  java
  • JVM的干货

    JVM:

    用JVM来运行程序的时候,需要内存空间。程序是一个Java class文件,类的定义放在方法区中,程序在运行中会产生各种各样的对象,对象就存在于堆中,程序在执行的时候,其实是启动多个线程来执行,main就是一个主线程,来调用方法,方法中存在局部变量,局部变量放在栈,栈中分成线程存放,每个线程都有自己的栈空间,所以在栈中线程私有,堆是线程共享的。栈空间可能会溢出,常常出现递归嵌套的程序中,因为要不断压栈,栈的深度是有限的,可能会造成溢出。

    垃圾回收:

    方法区(线程共享的区域):类信息 常量  静态变量 和编译器编译之后的信息

    堆:对象(新生代  老年代 )

    根据对象的存活的年龄划分新生代和老年代,把新生代幸存的放到from区,不断进行来及回收,当死不了的时候放到老年代中,to区是用来复制  腾挪使用。 默认 8:1:1 大对象直接进入老年代

    判断对象是否可用:根节点搜索算法

    垃圾回收算法:标记清除   标记整理   复制

    参数:

    -xmx最大堆内存

    -xms开始堆内存

    -xmn年轻代的大小

    -Xss栈的大小

    … 年轻代和老年代的大小(默认4:1)

    … 年轻代中的比例  8:1:1

    .. 设置年龄(进入老年代的时间  默认值15)

    在JDK的bin目录下可以使用jconsole和jvisualvm来查看Java程序的相关信息。可以看到一些详细的信息。

    程序测试JVM:

    1. 设置堆小一些 不断创建对象 添加到list :堆溢出
    2. 线程死循环和一个线程无限等:查看逻辑错误和无限等待问题
    3. 死锁:查看问题
    4. 当堆溢出的时候(JVM参数设置) 可以把溢出的错误信息设置到某个文件下作为快照(需要使用工具打开进行分析)
  • 相关阅读:
    OnMeasureItem和OnDrawItem的区别和联系
    DockPanel 类
    C# 源码 AForge.NET
    ystem.Windows.Forms.SplitContainer : ContainerControl, ISupportInitialize
    System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....
    System.ComponentModel.Component : MarshalByRefObject, IComponent, IDisposable
    System.Windows.Forms.ListView : Control
    vs2013 密钥_
    系统封装 EasyBoot如何将WIN7安装版提取到光盘
    系统封装 ES3使用方法
  • 原文地址:https://www.cnblogs.com/hds-study-blogs/p/6904266.html
Copyright © 2011-2022 走看看