java内存模型(线程共享部分)
1、元空间(MetaSpace)与永久代(PermGen)的区别?
----》
1.1 元空间使用的是本机内存(这样的好处是,可以使用的内存空间变大了,没有OutOfMemoryError:PermGen space异常) ,永久代使用的是jvm内存!!!!核心!!!!
1.2 没有了字符串常量池(在jdk7中已经被移动到堆中),
1.3 存储的东西包括:类文件,在jvm运行时的数据结构,以及class的相关内容(如 method \ field)大体上都喝永久代一样,但是划分上更加合理了(比如类以及相关的元数据的生命周期与类加载器一致,每个加载器都会分配一个存储空间,可以单独更深入去了解)。
而永久代是用jvm内存
在jdk8中,metaspace替代了permgen
问MetaSpace相比PermGen的优势是什么?
1、字符串常量池存在永久代中,容易出现性能问题和内存不足
2、类和方法的信息大小难易确定,给永久代的大小制定带来问题
3、永久代会为GC带来不必要的复杂性(GC需要特殊处理永久代中数据)
4、方便HotSpo与其他JVM如Jrockit的集成
java堆(Heap)
说明,在虚拟机启动的时候创建,也是虚拟机中占内存最大的一块,唯一目的是保存对象实例
1、对象实例的分配区域
2、GC管理的主要区域
问题:JVM 三大性能调优参数 -Xms -Xmx -Xss的含义?
---》java -Xms 128m -Xmx128m -Xss256k -jar xxx.jar
-Xss 规定每个线程的虚拟机栈的内存大小(影响并发线程数的大小)
-Xms : 堆的初始值(一旦对象超过这个值,会自动扩容,扩展到Xmx值)
-Xmx: 堆能达到的最大值(一般将Xms和Xmx设置的值都是一样的,为了防止发生扩容时会发生内存抖动)
问题:请问Java内存模型中堆和栈的区别-----内存分配策略
----》
管理方式:栈不需要GC回收,堆需要GC
空间大小:栈的内存空间比堆的内存空间小
碎片相关:栈产生的碎片远少于堆
分配方式:栈支持静态和动态存储。而堆只支持动态存储
效率:栈比堆的执行效率高(内存块的结构本来就是栈的结构,堆的结构是双向链表,灵活度高,但是效率低)
额外知识:
内存的分配策略:
静态存储:编译时就计算出每个数据在运行时所需要的存储空间大小
栈式存储:数据区需求在编译时未知,只在运行时模块入口前确定
堆式存储:编译时或运行时模块入口都无法确定,动态分配
联系:栈保存时对象的引用,堆保存对象的实例(引用对象、数组时,栈里定义变量保存堆中目标的首地址)
可以看看下图,简单的程序,对应着元空间,堆,线程独占的联系:
问题:请解析一下不同JDK版本之间的intern()方法的区别----JDK6 VS JDK6+ ?
----》https://www.cnblogs.com/Kidezyq/p/8040338.html
java内存模型(线程共享部分)的更多相关文章
- 3.java内存模型以及happens-before规则
1. JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有这么简单,那我们就不必费劲周折的去学习它了.在多线程中稍微不注意就会出现线程安全 ...
- Java内存模型以及happens-before规则
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 从原子类和Unsafe来理解Java内存模型,AtomicInteger的incrementAndGet方法源码介绍,valueOffset偏移量的理解
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性和变量可见性,用volatile保持值的可见性和操作顺序性: 从一个小例子引发的 ...
- java线程内存模型,线程、工作内存、主内存
转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...
- Java 线程 — JMM Java内存模型
JMM Java Memory Model,Java内存模型,属于语言级的内存模型 并发编程中存在的问题: 如何通信:用于线程之间交换信息.两种方式:共享内存,消息传递 如何同步:用于控制不同线程间操 ...
- java内存模型与线程(转) good
java内存模型与线程 参考 http://baike.baidu.com/view/8657411.htm http://developer.51cto.com/art/201309/410971_ ...
- JAVA内存模型与线程
概述 由于计算机的运算速度和它的存储和通讯子系统的速度差距巨大,大部分时间都花在IO,网络和数据库上.为了压榨CPU的运算能力,需要并发.另外,优秀的并发程序对于提高服务器的TPS有重要的意义. 硬件 ...
- 【Java线程】Java内存模型总结
学习资料:http://www.infoq.com/cn/articles/Java-memory-model-1 Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态, ...
- Java内存模型与Java线程实现原理
硬件的效率与一致性 基于高速缓存的存储交互很好的解决了处理器和内存的速度矛盾,但是也为计算机系统带来了更高的复杂度,因为引入了一个新问题:缓存一致性. 在多处理器系统中,每个处理器都有自己的高速缓存, ...
随机推荐
- Swift3.0 UICollectionView 删除,拖动
UICollectionView实现了一下常见的新闻分类. 附有效果图 近期一直在深入学习swift,实现了CollectionView item的头东与删除,用的都是系统的一些函数方法,看起来比较 ...
- poj3669【bfs】
题意: 有个**要看流星雨,可是流星雨会砸死他的... 给出n个流星雨下落的坐标,时间,如果那个**在下落坐标或是上下左右就会gg,问你他最短跑到流星雨打不到的地方的时间. 思路: ①:预处理出一个矩 ...
- 开挂的map
转自:http://blog.csdn.net/sunshinewave/article/details/8067862 #include<iostream> #include<ma ...
- CentOS服务器下安装配置SSL
https是一个安全的访问方式,数据在传输过程中是加密的,https基于SSL. 一.安装apache和ssl模块 1.安装apache #yum install httpd 2.安装ssl模块 #y ...
- 数位dp真·浅谈 By cellur925
预警:由于是从$Vergil$学长那里和$Mathison$大神那里学来的,所以清一色记忆化搜索!qwq 巨佬的数位dp讲解(未来的咕咕日报头条): https://www.luogu.org/blo ...
- Easy Game LightOJ - 1031
Easy Game LightOJ - 1031 upd:似乎有复杂度更优越的做法,见http://www.cnblogs.com/hehe54321/p/8431020.html 题意:A和B玩一个 ...
- jmeter(二十)JMeter中返回Json数据的处理方法
Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛.而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Js ...
- php url地址栏传中文乱码解决方法集合
php地址栏传中文$_GET下来后乱码,urlencode和urldecode,iconv,base64_encode等方法,整理基本是常用的了. php地址栏传中文$_GET下来后乱码,urlen ...
- 动手实现 React-redux(五):Provider
我们要把 context 相关的代码从所有业务组件中清除出去,现在的代码里面还有一个地方是被污染的.那就是 src/index.js 里面的 Index: ... class Index extend ...
- H+后台主题UI框架---整理(二)
本篇文章是针对H+后台主题UI框架的整理的第二部分.主要只有一个point.如下: 其代码如下: <div class="ibox float-e-margins"> ...