JVM有哪些方式进行调优?

2021-04-23 09:58发布

16条回答
樱田妮妮NiNi
2楼 · 2021-04-23 10:42

 1.数据类型

    java虚拟机中,数据类型可以分为两类:基本类型和引用类型

    基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。

    “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。

    基本类型包括:byte、short、int、long、char、float、double、boolean

    引用类型包括:类类型、接口类型和数组

byte

1B(8位)

-128 ~ 127

0

short

2B(16位)

-215  ~ 215-1

0

Int

4B(32位)

-231 ~ 231-1

0

long

8B(64位)

-263 ~ 263-1

0

char

2B(16位)

0 ~ 216-1

\U0000

float

4B(32位)

1.4013E-45 ~3.4028E+38

0.0F

double

8B(64位)

4.9E-324 ~1.7977E+308

0.0D

boolean

1B(8位)

True, false

false

2. 堆(heap)与栈(stack)

    堆和栈是程序运行的关键,很有必要它他们的关系说清楚。

    在java中,Main函数就是栈的起始点,也是程序的起始点。程序要运行总是有一个起点的(程序执行的入口)。


张皓铭
3楼 · 2021-04-23 10:56

 java虚拟机中,数据类型可以分为两类:基本类型和引用类型

    基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。

    “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。

    基本类型包括:byte、short、int、long、char、float、double、boolean

    引用类型包括:类类型、接口类型和数组


我想吃肉
4楼 · 2021-04-23 11:12

Jconsole,jProfile,VisualVM。


Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。

 

JProfiler:商业软件,需要付费。功能强大。

 

VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。


 java虚拟机中,数据类型可以分为两类:基本类型和引用类型

    基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。

    “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。

    基本类型包括:byte、short、int、long、char、float、double、boolean

    引用类型包括:类类型、接口类型和数组


三岁奶猫
6楼 · 2021-04-23 13:15

由于 Full GC 的成本要远远高于 Minor GC ,因此尽可能将对象分配在新生代,在JVM 调优中,可以为应用程序分配一个合理的新生代空间,以最大限度避免新对象直接进去老年代。

V_Faln
7楼 · 2021-04-25 15:01

年轻代大小选择


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


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


年老代大小选择


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


并发垃圾收集信息


持久代并发收集次数


传统GC信息


花在年轻代和年老代回收上的时间比例


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


吞吐量优先的应用


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


较小堆引起的碎片问题


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


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


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


JVM的内存限制


清屿
8楼 · 2021-04-25 16:51

 java虚拟机中,数据类型可以分为两类:基本类型和引用类型

    基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。

    “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。

    基本类型包括:byte、short、int、long、char、float、double、boolean

    引用类型包括:类类型、接口类型和数组


Vita
9楼 · 2021-04-25 20:11

 java虚拟机中,数据类型可以分为两类:基本类型和引用类型。

    基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。

    “引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。

    基本类型包括:byte、short、int、long、char、float、double、boolean

    引用类型包括:类类型、接口类型和数组


相关问题推荐

  • 回答 156

    对于每一位才开始接触JAVA的新手来说,先不要管算法和数据结构,大多数简单的程序不需要用到算法和数据结构,所以当你真正需要时再去学习。编程一段时间以后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,然后动手去实践。当我们在去...

  • 回答 93

    2个都很好就业,更关键的是要学得到东西

  • 回答 12
    已采纳

    获取Map集合中所有的key可以通过map集合的keySet()方法获取例如:    Map map = new HashMap();    map.put(xx,xx); //存放数据    //.... 省略    Set set = map.keySet();    //可以通过迭代器进行测试    Iterator iter = set.iter...

  • 回答 56
    已采纳

    不同年龄,不同掌握程度,学历,找工作城市,面试能力这是一个多方面影响的结果,如果是平均值的话,全国平均薪资14k左右

  • 回答 38

    具体学多久,根据自己的学习力,自律性、解决问题能力来决定若系统性学习,跟着讲师的节奏走,大概半年左右,有专业的讲师把课程进行规划,尽心系统学习,有问题,讲师会帮忙解决,学习的效率很高,避免了自学中出现各种问题解决不了,而耽误很多时间,可能会...

  • 回答 23
    已采纳

    (1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...

  • BIO与NIO、AIO的区别2020-05-19 15:59
    回答 4
    已采纳

    IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO     在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要...

  • Java方法的命名规则2021-04-06 19:07
    回答 31

    ava是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包、类、变量等的命名规范。(一)Package(包)的命名Package的名字应该都是由一个小写单词组成,例如com、xuetang9、compan...

  • 回答 2

    public class Point {    private int x;    private int y;    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    } ...

  • 回答 6

    经典版单例模式public class Singleton {        private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。     private Singleton() {     }     public static  Singleton getInstance()...

  • 回答 3

    哈希表的长度一般是定长的,在存储数据之前我们应该知道我们存储的数据规模是多大,应该尽可能地避免频繁地让哈希表扩容。但是如果设计的太大,那么就会浪费空间,因为我们跟不用不到那么大的空间来存储我们当前的数据规模;如果设计的太小,那么就会很容易发...

  • 回答 14

    1. DOM(Document Object Model)        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才...

  • 回答 19

    1)作用不同: throw用于程序员自行产生并抛出异常; throws用于声明在该方法内抛出了异常2) 使用的位置不同: throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表的后面,不能单独使用。3)内容不同: throw抛出一个异常对象,且只能是...

  • 回答 11

    基本执行过程如下:1)程序首先执行可能发生异常的try语句块。2)如果try语句没有出现异常则执行完后跳至finally语句块执行;3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。4)catch语句块可以有多个,分别捕获不同类型...

  • 回答 20

    100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...

  • 回答 16

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译...

没有解决我的问题,去提问