垃圾回收,了解一下

SCU【C】程序设计基础期末安全项目lab2-Deadbeef-writeup(附题目&源码) 项目名称(本质:栈溢出攻击)【源码在文首】和lab1一样,此题又是美国卡耐基梅隆大学的平时作业哈哈哈! 项目要求是把栈溢出,强行更改函数返回值,输出0xdeadbeef。 阅读详情
    /**

         * 高并发拆分原则 
         * 任务的性质:CPU任务,IO任务
         * 并发数量:
         * 执行时间
         * 任务优先级
         * 依赖性
         * 资源性质
         * 业务耦合度
         * 
         * 自定义线程池继承ThreadPoolExecutor类,实现方法
         * 
         */
        System.out.println('a');

        /*
         * jvm内存结构
         * 1、程序计数器
             * 当前线程所执行的字节码的行号指示器
             * 字节码解析器通过改变程序计数器的值来选取下一条需要执行的字节码指令
             * 确保线程切换后能恢复到正确的执行位置,每个线程有独立的程序计数器
             * 程序计数器是线程私有的内存
             * 是唯一个没有规定任何内存溢出的内存区域
         * 2、jvm栈
             * 线程私有
             * 生命周期与线程相同
             * 描述java方法执行的内存模型
             * 方法执行时会创建栈帧来存放方法的信息和数据
             * 栈帧中的局部变量表是在编译期间完成分配的
             * 当请求深度大于jvm允许的足底啊深度时,StackOverflowError
             * jvm栈可以动态扩展,无法申请到足够内存时,OutOfMemoryError
         * 3、本地方方法栈
             * 为jvm调用操作系统本地方法服务的
         * 4、共享堆
             * jvm中内存区域最大一块
             * 被所有线程共享
             * jvm启动是创建,存放对象实例
             * gc主要管理区域
             * 物理不连续,逻辑连续
             * 无法扩展时,OutOfMemoryError
         * 5、方法区
             * 线程共享
             * 存储jvm加载的类信息、常量、静态变量、编译后的代码等数据
             * 堆的一个逻辑部分
             * 也叫做非堆 Non-Heap,永久代
             * 最终要的部分是运行时常量池
         * 
         * 
         * 
         * 程序计数器、虚拟机栈、本地方法栈 跟线程的生命周期相同,分配和回收是确定的
         * 
         * 堆内存和方法区是通过垃圾回收机制的三代关系来完成的
         * 
         * jvm的垃圾回收机制
         * jvm堆和非堆分为三个代
             * 年轻代 yong generation :主要是动态的存储
                * eden区和两个相同的survior区
                * 刚开始创建的对象都是放置在eden区
                * 主要是为了生命周期段的对象尽量留在年轻代
                * 当eden申请不到空间的时候,进行minorGC,把存活的对象拷贝到survior
                * 
             * 年老代
             * 永久带permanent generation:方法区,主要存储java的类信息等,基本不参于垃圾回收
         * 
         * 
         * 
         * MinorGC:年轻代gc,非常频繁,回收速度快
         * majorGC:年老代gc,发生时,至少一次minorgc,速度慢
         * FullGC:整个堆内存进行的gc,很多时候是majorGC
         * 
         * majorGC和fullgc 最耗cpu,影响程序的响应,需要合理设置年轻和年老大小
         * 
         * 
         * 
         * 回收过程
             * 对象在Eden区完成内存分配
             * Eden区满了,创建对象申请不到空间,触发minorGC进行垃圾回收(young eden 和survivor)
             * minorGC时,eden会被清空,不会回收的会被放到survivor,另一个survivor不能被回收的对象也会放到这里
             * 始终保持一个survicor是空的,survicor满时,里面的对象被copy到old区,或者对象足够old是,也会被放到old区
             * old满时,进行fullGC
         * 
         * 
         * 
         * 主要回收机制
             * 串行收集器:单线程回收,效率高
             * 并行收集器:多线程,减少回收时间
             * 并发收集器:并发进行,gc暂停很少的时间,响应快
         * 
         * 
         * 
         * 常见的内存溢出的三种情况
         * OutOfMemoryError:
         * java heap space
         * 查看gc占用的时间,手动设置heap的大小
         * 
         * permgen space
         * 内存永久保存区域
         * 存放的是class和meta信息
         * 类load的时候放入
         * gc不会清理
         * 一般发生在启动阶段
         * 设置MaxPermSize大小
         * 
         * thread stack space 
         * 构造函数层太多,栈溢出
         * 设置每个线程的Stack
         * 
         * 
         * 
         * 知道了这些了
         * jvm调优应该知道怎么办了
         * 想仔细了解的话
         * 待我再找本书
         * 
         * 
         * -Xms:java heap 初始大小 默认物理内存的1/64
         * -Xmx:ava heap  最大值, 不可超过物理内存
         * -Xmn :young generation 的heap大小 Xmx的1/3或4/1 ,年轻代增加 ,年老减小
         * -Xss:每个线程的Stck,128kb最佳,
         * -XX:permsize 永久保存区初始大小
         * -XX:MaxPermSize 
         * -XX:SurvivorRatio: eden区和survivor比值 8  两个survivor与一个eden区的比值为2:8,一个survivor占年轻代的1/10
         * 
         * java基础的监控工具
         * bin/jvisualvm
         * 
         * java性能分析器
         * jconsole
         * 
         * 
         *压测工具
         * badboy
         * jmeter
         * 
         * 
         * MutithreadedTc 测试并发jar
         * 
         */





jvm性能调优、压测有待学习

华为OD机试 - 停车场费用统计 - HashSet(Python/JS/C/C++ 双机位C卷 100分) 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。停车场统计当日总收费,包月的车不统计,不包月的车半个小时收一块钱,不满半小时不收费,如果超过半小时,零头不满半小时按半小时算,每天11:30-13:30时间段不收费,如果一辆车停车时间超过8小时后不收费。现提供停车场进出车辆的统计信息,需要你来计 阅读详情

相关推荐

Hadoop生态系统-新手快速入门(含HDFS、HBase系统架构)

Hadoop简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量...

Hadoop环境搭建教程 473

Java垃圾回收简介

Java关键术语 JavaAPI:一系列帮助开发者创建Java应用程序的封装好的库。 Java 开发工具包 (JDK):一系列工具帮助开发者创建Java应用程序。JDK包含工具编译、运行、打包、分发和监视Java应用程序。 Java 虚拟机(JVM):JVM是一个抽象的计算机结构。Java程序根据JVM的特性编写。JVM针对特定于操作系统并且可以将...

auo9603的博客 220

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 456

JVM垃圾回收介绍

本文总结自周志明的第 2 版《深入理解 Java 虚拟机——JVM 高级特性与最佳实践》 文章目录JVM 垃圾回收一、对象死亡1. 引用计数算法2. 可达性分析算法3. Java 中的引用4. 宣告对象死亡5. 方法区回收二、 垃圾回收算法1. 标记—清除算法2. 复制算法3. 标记—整理算法4. 分代收集算法三、 垃圾收集器1. Serial 收集器2. ParNew 收集器3. Paral...

stdio_54456153的博客 229

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

使用mixamo导入人物动作到unity

导入的材质是withoutSkin时选择Create From Other Model + 选择带withSkin里的。方案二:Textures选择Extract Textures,将文件存放到喜欢的位置(不行继续方案三)2.动画没有动:开个Animation窗口,选择人物的Prefab(Hierachy),查看窗口左侧。方案三:选中素材自带或者导出的Material,接着方案一选择 选中的materials进行转化。选 withSkin,剩下的动作选without Skin)(角色发生位移时出现选项)

big_good_boy的博客 1636

谈谈你对垃圾回收机制的了解?

一, 垃圾回收机制 在系统运行过程中会产生一些无用的对象,这些对象一直占用内存,不清理这些无用的对象可能会导致内存耗尽,所有垃圾回收机制的是内存. 垃圾收集的原理和概念 对于对象实例收集.主要有两种基本算法,引用计数算法,可达性分析。 引用计数算法:就是为对象添加一个引用计数,用于计数对象被引用的情况,如果计数为0,表示 对象可以被回收.(java并没有选择引用计数,因为存在一个基本难题,就...

weixin_45200317的博客 1630

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

【计算机视觉 | MMDetection】关于mmdetection如何计算参数量、计算量和速度FPS

wzk4869的博客 3022

一文了解JVM的垃圾回收

当进行垃圾回收的时候,会暂停所有线程去完成垃圾回收。Minor GC :发生在新生代的垃圾回收,当eden区满了会触发,暂停时间较短。Full GC:对新生代和老年代进行完整的垃圾回收,当老年代内存不足时会触发,暂停时间长,要尽量避免。

keygwh的博客 2988

拼多多笔试真题-多多送快递(C++/Py/Java /Js/Go)

拼多多技术岗笔试 8月2号真题,拼多多笔试第三题【多多送快递】,提供详细思路讲解以及Java、C++、Python、Go、JavaScript多语言代码实现。拼多多笔试真题【多多送快递】多语言题解。

qq_45776114的博客 295

基于VSCode+clangd插件打造高效C++开发环境之四:clangd配置

本文介绍如何配置VSCode+clangd插件进行高效C++开发。重点内容包括:1)生成compile_commands.json文件,通过ninja工具提取编译命令并使用gen_compdb脚本转换;2)配置clangd命令行参数,如设置后台索引、并行度等;3)编写.clangd配置文件,调整编译标志和诊断选项;4)添加.clang-format文件定义代码风格;5)在VSCode中添加远程服务器工作目录。配置完成后需重启clangd服务使更改生效。文章还提供了MTK/QCOM等不同平台生成compile

5072

垃圾回收了解

一、如何判断对象可以回收 1引用计数法 python虚拟机早期使用的 只要一个对象被其它变量所引用,则该对象计数+1,引用两次计数+2,如果一个变量不在被引用,则计数-1,当对象的引用计数变为0,则没有被引用,可以作为垃圾回收 弊端: 对象互相循环使用 A对象引用B对象,则B引用计数+1.同时B对象引用A对象,则A引用计数+1, 没有谁在引用他们,他们各自的引用都是1,即使都不会被使用,永远不会为0,不会垃圾回收,会造成内存泄漏 2 可达性分析算法 扫描堆中的所有对象,看是否能沿着GC Root对象(一系

zhanlijuan 215

【Unity 实用工具篇】✨| 使用Fungus插件制作一个对话系统,简单好学易上手

今天带来的是Unity中一款简单易用的对话插件Fungus,它是一个免费的交互式的对话系统。 Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,并且支持本地化,对相机、Sprite及音乐音效的控制。 学会使用该插件就可以做一些对话剧情类的游戏了,还是非常好用的,下面就来学习一下Fungus具体怎么使用吧!

努力前行,总会成为自己心中的那道光 1万+

谈谈你都了解过哪些垃圾回收器,CMS垃圾回收器有什么问题吗?

在JDK3之前,单线程垃圾回收器是唯一的选择。在进行垃圾回收时会暂停用户的线程,直到他收集完毕。 串行的垃圾回收器有两种,Serial和Serial Old,一般搭配使用(分代回收(老年代标记-压缩)), 随着JDK版本的更新迭代,串行垃圾回收器的停顿时间较长,所以衍生出了并行垃圾回收器,多个线程同时工作,但也会STW(stop-the-world),暂停用户线程。在JDK5之后,搭配CMS一起使用。 并行垃圾回收器是ParNew、 Parallel Scavenge、Parllel

qq_53999369的博客 442

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

垃圾回收算法有哪些?了解哪些垃圾回收器?

在Java中,指针碰撞是一种垃圾收集算法中用于分配内存的一种方式。它通常用于实现停顿时间较短的垃圾收集器,如复制算法和标记整理算法。指针碰撞的基本思想是将堆内存分为两个区域:一个是已分配的对象区域,另一个是未分配的空闲区域。通过一个指针来分隔这两个区域。当需要分配对象时,垃圾收集器将对象的大小与空闲区域的大小进行比较,如果空闲区域足够容纳对象,则将指针碰撞指针向前移动对象的大小,并返回指针碰撞指针的旧值作为对象的起始地址。如果空闲区域不足以容纳对象,则进行垃圾回收操作,释放一些内存后再进行分配。

dsgdauigfs的博客 854

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

垃圾回收算法你了解过吗?

Java堆和方法区,这两个区域不具有确定性:这部分内存的分配和回收是动态的,只有在运行期间内,才能确定创建哪些对象、方法执行时不同的逻辑分支、接口的多个实现类等,GC所关注的也正是这部分的内存如何管理。

Stay Hungry,Stay Foolish 1613

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

欧尼酱讲JVM(20)——了解垃圾回收

本篇文章中,我会简单介绍:什么是GC,为什么需要GC,了解早期垃圾回收行为,应该关心哪些区域的回收。小伙伴们赶快点进来了解一下吧!

化身孤岛的鲸 435

垃圾回收算法的实现细节以及了解其他垃圾回收器

CMS关注新增,但是会把新增对象的前一个引用变为灰色,重新对所有子对象进行遍历,有一定性能损耗。G1引用的打破,不需要重新遍历对象,因此效率较高。但是维护快照增加了一定的内存成本。

2401_83384536的博客 867

一文了解垃圾回收算法、垃圾收集器

由于Finalizer线程优先级相较于普通线程优先级要低,而根据Java的抢占式线程调度策略,优先级越低的线程,分配CPU的机会越少,因此当多线程创建重写finalize方法的对象时,Finalizer可能无法及时执行finalize方法,Finalizer线程回收对象的速度小于创建对象的速度时,会造成F-Queue越来越大,JVM内存无法及时释放,造成频繁的Young GC,然后是Full GC,乃至最终的OutOfMemoryError。从上图可以看出,没有进行垃圾回收之前,内存占用11960K。

loushaoqi的博客 2656

了解JVM垃圾回收器

了解JVM垃圾回收器 1. 7种垃圾回收器 种类 回收器名字 串行 Serial ,Serial Old 并行 ParNew,Parallel SCavenge,Parallel Old 并发: CMS,G1 按照分区的划分 Young G : Serial ,Parallel SCavenge,ParNew, Old G: Serial Old,Parallel Old,CMS G1是两个都可以, 可以利用-XX:+PrintCommandLineFlags -XX:+

jiohfgj的博客 225

垃圾回收的机制,你了解过吗?

服务器的垃圾回收机制是什么?我们为什么要学习垃圾回收机制?今天我们就带着这两个问题一起来看看。 在我们日常的开发过程中,并不会过多的关注对象的回收和释放,JVM就可以帮助我们来完成垃圾,减少了我们很多的工作量,仿佛垃圾回收离我们很远,其实垃圾回收机制是我们从初级到中高级开发必须掌握的。把回收对象的任务完全交给JVM,看似解放了,其实也增加了不确定性,事情并不是什么时候都是完美的,在现如今各种复杂业务场景下,不合适的垃圾回收算法及策略,往往是导致我们系统性能瓶颈的主要原因。 垃圾回收也不能一概而论,不同的业务

YOKEhn的博客 242

深入了解JVM和垃圾回收算法

JVM是Java虚拟机(Java Virtual Machine)的缩写,是Java程序运行的核心组件。JVM是一个虚拟的计算机,它提供了一个独立的运行环境,可以在不同的操作系统上运行Java程序。

weixin_63357306的博客 820

深入了解浏览器的垃圾回收

什么是垃圾数据? 我们在写 js 代码的时候,会频繁地操作数据。在一些数据不被需要的时候,它就是垃圾数据,垃圾数据占用的内存就应该被回收。 变量的生命周期 比如这么一段代码: let dog = new Object()let dog.a = new Array(1) 当 JavaScript 执行这段代码的时候, 会先在全局作用域中添加一个dog 属性,并在堆中创建了一个空对象,将该对象的地址指向了 dog。 随后又创建一个大小为 1 的数组,并将属性地址指向了 dog.a。此时的内存布局图如下所示::

qq_47008195的博客 1216

深入了解jvm垃圾回收

(3)重复(2)的操作, 某些对象在反复 Survive 15 次后,或者Eden+from 的存活对象 > to ,这些对象就只能放到老年代了,如果老年代放不下了,就进行Full GC);然后清除两端边界外的对象。一个字符串“abc”已经进入常量池,但是当前系统没有任何一个String对象引用了做“abc”的字面量,那么,如果发生垃圾回收并且有必要时,“abc”就会被系统移出常量池。(1)在年轻代中,Eden区提供堆内存如果满了,Eden进行MinorGC,将存活的对象→from ,Eden区清空;

weixin_36723038的博客 707

深入了解 JavaScript 垃圾回收机制

在 JavaScript 中,垃圾回收(Garbage Collection, GC)是一个重要的概念,它确保内存得到有效管理,防止内存泄漏。尽管垃圾回收在现代编程语言中是一个相对复杂的话题,但了解其工作原理和机制对编程效率和性能优化非常有帮助。本文将深入浅出地探讨 JavaScript 垃圾回收的各个方面。垃圾回收是指自动释放不再使用的内存。程序在运行时会动态分配内存,但并不是所有被分配的内存都会一直被使用。垃圾回收器的任务就是识别那些不再被使用的内存,并将其释放回系统,以便其他进程可以使用。

gaotlantis的博客 4210

垃圾回收底层原理【深入了解】

理论基础:可达性分析(判断垃圾)+ 四大回收算法(处理垃圾);代码实现模拟层面:用 Java 实现标记、清除、复制的核心流程,理解逻辑;工业级:用 C/C++ 操作底层内存,支持并发、内存池、写屏障等优化;语言差异:Java(分代收集)、Go(三色标记)、Python(引用计数),本质都是 “自动识别 + 释放垃圾”;价值(利润):技术上提升效率、降低故障,商业上节约成本、带动生态。

beiguo666的博客 1043
上一篇: 线程池API,了解一下
下一篇: 《测试驱动开发的艺术》了解一下
go_sparrow
博客等级 码龄11年 25粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值