• 【JVM】调优笔记1-----堆栈概念的对碰


    关于JVM的工作原理以及调优是一个向往已久的模块,终于有幸接触到:http://pengjiaheng.iteye.com/blog/518623

    那就顺着这个思路,来梳理一下自己看到后的结论和感想。

    首先,垫些基础,下面会用到

    1.Java基本数据类型的长度

    类型 字节 表示范围 包装类
    byte(字节型) 1 -128~127 Byte
    short(短整型) 2 -32768~32767  Short
    int(整型) 4 -2147483648~2147483647 Integer
    long(长整型) 8 -9223372036854775808 ~ 9223372036854775807 Long
    float(浮点型) 4 -3.4E38~3.4E38 Float
    double(双精度型) 8 -1.7E308~1.7E308 Double
    char(字符型) 2 从字符型对应的整型数来划分,其表示范围是0~65535  Charater
    booealn(布尔型) 1 true或false Boolean

    2.解释【位-字节-字符】概念

    关于编码方式和一个字符几个字节的详细解释:http://www.cnblogs.com/God-/p/6006749.html

    具体的一个字符是几个字节,就要看具体的编码方式了,可以看看上面这个详细的解释!

    这里只需要清楚,上面基本数据类型,例如:short是2个字节的长度,一个字节是8bit(位),那2个字节就是16位,也就是short能表示的数据范围是(2^16)-1次方也就是65536-1的范围内,也就是-32768-32767

    3.java中值传递和参数传递的问题

    正好之前一段时间有http://www.cnblogs.com/sxdcgaq8080/p/7093462.html

    可以作为参考

    接着

    谈谈主题,堆与栈的概念(参考:http://pengjiaheng.iteye.com/blog/518623)

    1. 栈是运行时的单位,而堆是存储的单位

        栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。

        在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序)相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。

    2.堆中存什么?栈中存什么

        堆中存的是对象。

     栈中存的是基本数据类型和堆中对象的引用。

      一个对象的大小是不可估计的,或者说是可以动态变化的,但是在栈中,一个对象只对应了一个4btye的引用(堆栈分离的好处)。

     3.为什么不把基本类型放堆中呢?

      上面有基本数据类型的大小,占用的空间一般是1~8个字节——需要空间比较少,而且因为是基本类型,所以不会出现动态增长的情况——长度固定,因此栈中存储就够了

    4.本地方法

    这里既然说到了本地方法栈,就简单了介绍一下本地方法

    简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。

    具体参考:http://www.cnblogs.com/langtianya/p/3459647.html

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

    后话:

    堆和栈中,栈是程序运行最根本的东西。程序运行可以没有堆,但是不能没有栈。而堆是为栈进行数据存储服务,说白了堆就是一块共享的内存。不过,正是因为堆和栈的分离的思想,才使得Java的垃圾回收成为可能。

    Java中,栈的大小通过-Xss来设置,当栈中存储数据比较多时,需要适当调大这个值,否则会出现java.lang.StackOverflowError异常。常见的出现这个异常的是无法返回的递归,因为此时栈中保存的信息都是方法返回的记录点。

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

    主体参考:http://pengjiaheng.iteye.com/blog/518623

  • 相关阅读:
    vue-cli脚手架 安装
    音视频
    移动端开发问题
    GIT提交命令清单
    关于cookie和$.cookie
    emoji表情进行编码以适配移动端用户emoji表情的输入和展示
    父组件如何使用子组件中的方法
    uniapp实现锚点跳转
    uniapp判断android还是iOS
    uniapp动态设置当前页面标题
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/7150568.html
Copyright © 2020-2023  润新知