zoukankan      html  css  js  c++  java
  • JVM粗解

    主要是碰到了eclipse无法启动的问题。之前不知道怎么回事导致eclipse启动速度一次比一次慢,

    百度了下开始改动eclipse.ini参数

    也不知道改了啥。第二天直接起不来eclipse了。

    于是花一上午 搞了一下这个

    顺带记录一下堆内存和JVM虚拟内存的理解


    堆(Heap)和非堆(Non-heap)内存 
    按照官方的说法:“Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 
    虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。
    简单来说堆就是Java代码可及的内存,是留给开发人员使用的;
    非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法
    的代码都在非堆内存中。 
    堆内存分配:
    JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;
    JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。
    默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
    空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
    因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。 

    非堆内存分配:
    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
    由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 

    JVM内存限制(最大值) 
    首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。
    简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说
    Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了。 

    设置VM参数导致程序无法启动主要有以下几种原因: 
    1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的值大于-XX:MaxPermSize; 
    2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制,比如当前操作系统最大内存限制,或者实际的物理内存等等。
    说到实际物理内存这里需要说明一点的是,如果你的内存是1024MB,但实际系统中用到的并不可能是1024MB,因为有一部分被硬件占用了。 

    最后贴一下配置

    -Xms256m

    -Xmx1024m
    -XX:PermSize=128M 
    -XX:MaxPermSize=256M
    -XX:ReservedCodeCacheSize=128m
    -XX:+TieredCompilation
     

    -startup
    plugins/org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.800.v20180827-1352
    -product
    org.eclipse.epp.package.java.product
    -showsplash
    org.eclipse.epp.package.common
    --launcher.defaultAction
    openFile
    --launcher.defaultAction
    openFile
    --launcher.appendVmargs
    -vmargs
    -Dosgi.requiredJavaVersion=1.8
    -Dosgi.instance.area.default=@user.home/eclipse-workspace
    -XX:+UseG1GC
    -XX:+UseStringDeduplication
    --add-modules=ALL-SYSTEM
    -Dosgi.requiredJavaVersion=1.8
    -Dosgi.dataAreaRequiresExplicitInit=true
    -Xms256m
    -Xmx1024m
    --add-modules=ALL-SYSTEM

  • 相关阅读:
    初识MVC web框架--Controller与View交互1
    Web框架UI系列--MVC常用控件讲解
    管理大师__Vuex
    语言国际化----vue-i18n
    uniapp动态获取高度
    vue__双向数据绑定v-model
    vue__模板解析3一般指令解析
    vue__模板解析2:事件指令解析
    vue__模板解析:大花括号表达式解析
    vue__数据代理
  • 原文地址:https://www.cnblogs.com/PrayzzZ/p/11422351.html
Copyright © 2011-2022 走看看