黑客24小时在线接单网站

联系黑客,怎么找黑客,24小时在线黑客,黑客在线QQ,找黑客

jvmxss是什么(xss jvm含义)

本文目录一览:

jvm优化.有哪些jvm参数?用过哪些jvm调优工具

JVM是最好的软件工程之一,它为Java提供了坚实的基础,许多流行语言如Kotlin、Scala、Clojure、Groovy都使用JVM作为运行基础。一个专业的Java工程师必须要了解并掌握JVM,接下来就给大家分享Java基础知识中JVM调优相关知识点。

杭州Java基础知识学习之JVM调优讲解

JVM常见的调优参数包括:

-Xmx:指定java程序的最大堆内存, 使用java -Xmx5000M -version判断当前系统能分配的最大堆内存;

-Xms:指定最小堆内存, 通常设置成跟最大堆内存一样,减少GC;

-Xmn:设置年轻代大小。整个堆大小=年轻代大小+年老代大小。所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8;

-Xss:指定线程的最大栈空间, 此参数决定了java函数调用的深度, 值越大调用深度越深, 若值太小则容易出栈溢出错误(StackOverflowError);

-XX:PermSize:指定方法区(永久区)的初始值,默认是物理内存的1/64,在Java8永久区移除, 代之的是元数据区,由-XX:MetaspaceSize指定;

-XX:MaxPermSize:指定方法区的最大值, 默认是物理内存的1/4,在java8中由-XX:MaxMetaspaceSize指定元数据区的大小;

-XX:NewRatio=n:年老代与年轻代的比值,-XX:NewRatio=2, 表示年老代与年轻代的比值为2:1;

-XX:SurvivorRatio=n:Eden区与Survivor区的大小比值,-XX:SurvivorRatio=8表示Eden区与Survivor区的大小比值是8:1:1,因为Survivor区有两个(from, to)。

JVM实质上分为三大块,年轻代(YoungGen),年老代(Old Memory),及持久代(Perm,在Java8中被取消)。

年轻代大小选择

响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。

吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。

年老代大小选择

响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:并发垃圾收集信息、持久代并发收集次数、传统GC信息、花在年轻代和年老代回收上的时间比例。

减少年轻代和年老代花费的时间,一般会提高应用的效率。

吞吐量优先的应用:一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象。

较小堆引起的碎片问题

因为年老代的并发收集器使用标记、清除算法,所以不会对堆进行压缩。当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象。但是,当堆空间较小时,运行一段时间以后,就会出现“碎片”,如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记、清除方式进行回收。如果出现“碎片”,可能需要进行如下配置:

-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩。

-XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩。

jvm配置文件位置以及文件名是什么?里面可以用 -Dxxxx=xxx 设置参数 用system.getProperty()可以取值

1

假设你是windows平台,你安装了J2SDK,那么现在你从cmd控制台窗口进入J2SDK安装目录下的bin目录,然后运行java命令,出现如下结果,这些就是包括java.exe工具的和JVM的所有命令都在里面。这里面告诉你可以用 -Dxxxx=xxx 设置参数

即:-Dname=value

set a system property

----------------------

D:\j2sdk15\binjava

Usage: java [-options] class [args...]

(to execute a class)

or java [-options] -jar jarfile [args...]

(to execute a jar file)

where options include:

-client to select the "client" VM

-server to select the "server" VM

-hotspot is a synonym for the "client" VM [deprecated]

The default VM is client.

-cp class search path of directories and zip/jar files

-classpath class search path of directories and zip/jar files

A ; separated list of directories, JAR archives,

and ZIP archives to search for class files.

-Dname=value

set a system property

-verbose[:class|gc|jni]

enable verbose output

-version print product version and exit

-version:value

require the specified version to run

-showversion print product version and continue

-jre-restrict-search | -jre-no-restrict-search

include/exclude user private JREs in the version search

-? -help print this help message

-X print help on non-standard options

-ea[:packagename...|:classname]

-enableassertions[:packagename...|:classname]

enable assertions

-da[:packagename...|:classname]

-disableassertions[:packagename...|:classname]

disable assertions

-esa | -enablesystemassertions

enable system assertions

-dsa | -disablesystemassertions

disable system assertions

-agentlib:libname[=options]

load native agent library libname, e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:pathname[=options]

load native agent library by full pathname

-javaagent:jarpath[=options]

load Java programming language agent, see java.lang.instrument

-----------------------------

在控制台输出信息中,有个-X(注意是大写)的命令,这个正是查看JVM配置参数的命令。

2

用java -X 命令还可以查看JVM的配置说明:

运行后如下结果,这些就是配置JVM参数的秘密武器,这些信息都是英文的,为了方便阅读,我根据自己的理解翻译成中文了(不准确的地方还请各位博友斧正)

--------------------------

D:\j2sdk15\binjava -X

-Xmixed mixed mode execution (default)

-Xint interpreted mode execution only

-Xbootclasspath:directories and zip/jar files separated by ;

set search path for bootstrap classes and resources

-Xbootclasspath/a:directories and zip/jar files separated by ;

append to end of bootstrap class path

-Xbootclasspath/p:directories and zip/jar files separated by ;

prepend in front of bootstrap class path

-Xnoclassgc disable class garbage collection

-Xincgc enable incremental garbage collection

-Xloggc:file log GC status to a file with time stamps

-Xbatch disable background compilation

-Xmssize set initial Java heap size

-Xmxsize set maximum Java heap size

-Xsssize set java thread stack size

-Xprof output cpu profiling data

-Xfuture enable strictest checks, anticipating future default

-Xrs reduce use of OS signals by Java/VM (see documentation)

-Xcheck:jni perform additional checks for JNI functions

-Xshare:off do not attempt to use shared class data

-Xshare:auto use shared class data if possible (default)

-Xshare:on require using shared class data, otherwise fail.

The -X options are non-standard and subject to change without notice.

-----------------------------------------------------------------------

3

JVM配置参数中文说明:

-------------------

1、-Xmixed mixed mode execution (default)

混合模式执行

2、-Xint interpreted mode execution only

解释模式执行

3、-Xbootclasspath:directories and zip/jar files separated by ;

set search path for bootstrap classes and resources

设置zip/jar资源或者类(.class文件)存放目录路径

3、-Xbootclasspath/a:directories and zip/jar files separated by ;

append to end of bootstrap class path

追加zip/jar资源或者类(.class文件)存放目录路径

4、-Xbootclasspath/p:directories and zip/jar files separated by ;

prepend in front of bootstrap class path

预先加载zip/jar资源或者类(.class文件)存放目录路径

5、-Xnoclassgc disable class garbage collection

关闭类垃圾回收功能

6、-Xincgc enable incremental garbage collection

开启类的垃圾回收功能

7、-Xloggc:file log GC status to a file with time stamps

记录垃圾回日志到一个文件。

8、-Xbatch disable background compilation

关闭后台编译

9、-Xmssize set initial Java heap size

设置JVM初始化堆内存大小

10、-Xmxsize set maximum Java heap size

设置JVM最大的堆内存大小

11、-Xsssize set java thread stack size

设置JVM栈内存大小

12、-Xprof output cpu profiling data

输入CPU概要表数据

13、-Xfuture enable strictest checks, anticipating future default

执行严格的代码检查,预测可能出现的情况

14、-Xrs reduce use of OS signals by Java/VM (see documentation)

通过JVM还原操作系统信号

15、-Xcheck:jni perform additional checks for JNI functions

对JNI函数执行检查

16、-Xshare:off do not attempt to use shared class data

尽可能不去使用共享类的数据

17、-Xshare:auto use shared class data if possible (default)

尽可能的使用共享类的数据

18、-Xshare:on require using shared class data, otherwise fail.

尽可能的使用共享类的数据,否则运行失败

The -X options are non-standard and subject to change without notice.

JVM环境参数怎么配置?

典型JVM参数设置:

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k

-Xmx3550m:设置JVM最大可用内存为3550M。

-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6

-XX:MaxPermSize=16m:设置持久代大小为16m。

-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

JVM如何确保新对象的内存分配的线程安全性

在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域)、Heap space(堆区域)、Java Stacks(Java栈)。其中永久保存区域主要存放Class(类)和Meta的信息,Class第一次被Load的时候被放入PermGen space区域,Class需要存储的内容主要包括方法和静态属性。堆区域用来存放Class的实例(即对象),对象需要存储的内容主要是非静态属性。每次用new创建一个对象实例后,对象实例存储在堆区域中,这部分空间也被jvm的垃圾回收机制管理。而Java栈跟大多数编程语言包括汇编语言的栈功能相似,主要基本类型变量以及方法的输入输出参数。Java程序的每个线程中都有一个独立的堆栈。容易发生内存溢出问题的内存空间包括:Permanent Generation space和Heap space。

第一种OutOfMemoryError: PermGen space

发生这种问题的原意是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与Permanent Generation space有关。解决这类问题有以下两种办法:

增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh 或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行: JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m" 如果是windows服务器还可以在系统环境变量中设置。感觉用tomcat发布sprint+struts+hibernate架构的程序时很容易发生这种内存溢出错误。使用上述方法,我成功解决了部署ssh项目的tomcat服务器经常宕机的问题。

清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。这种方法是网上部分人推荐的,我没试过,但感觉减少不了太大的空间,最靠谱的还是第一种方法。

第二种OutOfMemoryError: Java heap space

发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关。解决这类问题有两种思路:

检查程序,看是否有死循环或不必要地重复创建大量对象。找到原因后,修改程序和算法。 我以前写一个使用K-Means文本聚类算法对几万条文本记录(每条记录的特征向量大约10来个)进行文本聚类时,由于程序细节上有问题,就导致了Java heap space的内存溢出问题,后来通过修改程序得到了解决。

增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m -Xmx1024m

第三种OutOfMemoryError:unable to create new native thread

在java应用中,有时候会出现这样的错误:OutOfMemoryError: unable to create new native thread.这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。

那么是什么原因造成这种问题呢?

每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。这里假设使用1.5G给JVM,那么还余下500M可用内存。这500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在余下的400兆内存里创建这个物理线程,而不是在JVM的1500M的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用线程。

这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。

给出一个有关能够创建线程的最大个数的估算公式:

(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads

对于jdk1.5而言,假设操作系统保留120M内存:

1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads

1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads

对于栈大小为256KB的jdk1.4而言,

1.5GB allocated to JVM: ~1520 threads

1.0GB allocated to JVM: ~3520 threads

对于这个异常我们首先需要判断下,发生内存溢出时进程中到底都有什么样的线程,这些线程是否是应该存在的,是否可以通过优化来降低线程数; 另外一方面默认情况下java为每个线程分配的栈内存大小是1M,通常情况下,这1M的栈内存空间是足足够用了,因为在通常在栈上存放的只是基础类型的数据或者对象的引用,这些东西都不会占据太大的内存, 我们可以通过调整jvm参数,降低为每个线程分配的栈内存大小来解决问题,例如在jvm参数中添加-Xss128k将线程栈内存大小设置为128k。

  • 评论列表:
  •  黑客技术
     发布于 2022-07-19 04:17:28  回复该评论
  • A ; separated list of directories, JAR archives, and ZIP archives to search for clas
  •  黑客技术
     发布于 2022-07-19 03:19:06  回复该评论
  • of bootstrap class path 追加zip/jar资源或者类(.class文件)存放目录路径4、-Xbootclasspath/p:directories and zip/jar files separated by
  •  黑客技术
     发布于 2022-07-19 06:21:31  回复该评论
  • 本文目录一览:1、jvm优化.有哪些jvm参数?用过哪些jvm调优工具2、jvm配置文件位置以及文件名是什么?里面可以用 -Dxxxx=xxx 设置参数 用system.getProperty()可以取值3、JVM环境参数怎么配置?4、JVM如
  •  黑客技术
     发布于 2022-07-19 01:59:51  回复该评论
  • st checks, anticipating future default 执行严格的代码检查,预测可能出现的情况14、-Xrs reduce us
  •  黑客技术
     发布于 2022-07-18 23:58:32  回复该评论
  • class path -Xbootclasspath/p:directories and zip/jar files separated by ; prepend in front

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.