最近用 LLM 产品写代码的一些感想

前言 在 ChatGPT 刚出来的时候,也就是 GPT-3 就开始用了,那个时候免费用,也勉强能用来写代码。它能在提供的沙箱环境执行 Python 代码,任何微小的校验方法编写,例如验证身份证方法直接丢给它,让它写,提示词就写:根据你学到的知识,帮我编写下面的代码—— 就是要它和训练的数据输出一模一样的内容。到后面 ChatGPT4 出来,让它转 Python 后端项目到 Java 项目,DAG 构建族谱,计算同一个祠堂下两个人的关系,两千行的代码,也能正常转,只不过提示词要多写点,还得一点点手动拆分代码。那个时候是和 Claude 一起用,即使两个都是 Pro Plan 但是架不住代码比较多消耗 Token 很快。现在只有 Claude 写的代码能勉强用于生产,因为简单的代码 Cursor 就能自动补全,GPT-5 也就那样,甚至开源的 Qwen3-Coder-480B-A35B-Instruct 写代码能力都比 GPT-5 强。 在当前阶段,LLM 根本替代不了高级开发,尤其是一些大模型,例如 Qwen3 或者 GPT5 完全比不上 Claude4.1。但是把一些琐碎的,低层级的任务丢给大模型,它会做得很好,不要一句话,“帮我把这个文档弄一下”,这种没有明确的目的废话。 正确的话术应该:编写一个 Python 程序,输入的是 Markdown 格式的文档,将文档中表格数据输出成 SQL INSERT 语句,碰到复杂的表格则跳过处理,对于 HTML 代码编写的表格不予处理,对 Markdown 语法的表格,先获取表格头部信息提取对应英文字段,创建合适的表名,转成 MySQL8 的 SQL 语法创建表,并且生成 INSERT 语句插入数据。执行 Python 程序,输出建表和插入数据的 SQL,输出文件是 init.sql。 就是有着明确的问题,明确的处理方式,以及预期结果,毕竟 Garbage in, garbage out。你不可能指望垃圾数据,片汤话就能解决问题,传统的监督学习还要一个个标注数据,大模型能做到零样本输出看似它学会了思考,学会了表达,实际不是。在它训练的数据中,如果这部分存在过,就得让它过度拟合,回答。就像做数据治理,这家厂商给的性别字段叫 gender:(male,female,unknown),另一个厂商上报的数据是 sex(0,1,-1) 这些都可以做影射到符合国标 GB/T 2261.1-2003 的字段上,统一叫 gender(0,1,2,9),但是有些他上报 g:(x, y, trans, plastic bag, walmart bag),这样就输入的是垃圾信息, 别想治理出能用的数据。 ...

August 28, 2025

llm-1

大语言模型 LLM 初探 先进行接口调用,快速了解大语言模型能做什么,再逐个了解其原理。 通过 HTTP 请求初探 POST https://api.deepseek.com/chat/completions HTTP/1.1 Content-Type: application/json Accept: application/json Authorization: Bearer {{$dotenv DEEPSEEK_API_KEY}} { "messages": [ { "content": "你是一个智能客服 Alice,你的主要作用就是帮用户解答疑问", "role": "system" }, { "content": "你好,你是谁?", "role": "user" } ], "model": "deepseek-chat", "stream": false, "temperature": 0 } 回复的内容 HTTP/1.1 200 OK Date: Wed, 06 Aug 2025 08:21:59 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: close vary: origin, access-control-request-method, access-control-request-headers access-control-allow-credentials: true x-ds-trace-id: 4f241ebb167c3c01b3a97ed15dccc06a Strict-Transport-Security: max-age=31536000; includeSubDomains; preload X-Content-Type-Options: nosniff Server: CW Content-Encoding: gzip { "id": "379e029d-6fe0-4c17-8b1b-a834033f810e", "object": "chat.completion", "created": 1754468519, "model": "deepseek-chat", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "你好!我是智能客服Alice,很高兴为你服务。我是一个AI助手,可以帮助解答问题、提供信息或协助处理各种事务。有什么我可以帮你的吗?" }, "logprobs": null, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 21, "completion_tokens": 33, "total_tokens": 54, "prompt_tokens_details": { "cached_tokens": 0 }, "prompt_cache_hit_tokens": 0, "prompt_cache_miss_tokens": 21 }, "system_fingerprint": "fp_8802369eaa_prod0623_fp8_kvcache" } 从上面的例子我们可以发现,大模型有三个 role(角色),system 就是系统角色,user 是用户,assistant 就是大模型,与之相应的 content 就是它们之间的对话内容。 请求内容中的参数除了 messages 还有 model 表示使用什么模型,stream 表示是否流式回复,temperature 暂且按下不表后续会详细说明。 ...

August 11, 2025

llm-0

又是一波风口来了 又开始了,不懂行的,只会高谈阔论放没有味道屁的,又开始了,“李一舟” 们又复活了。开始利用大家的焦虑,开始卖些没有营养的课,新一波的收割又来了。那些高谈阔论的砖家疯狂啃噬着这新鲜的养料。 DeepSeek 这 xx 条指令帮你更好掌握 xx 创始人梁文峰 xx 量化投资 xx 我用 DeepSeek 赚到了 xx xx 大学 DeepSeek xx xx 宣布接入 DeepSeek AI 破局! 还有很多,就不列举了,点进去全都是依托谢特,毫无营养的内容,基本都是割韭菜,卖低质量课的。没有调查,就没有发言权,我明知道那些点进去是垃圾内容,我还是强忍着恶心,本着应该调查再发表观点的心态去看了,确实都是一坨,根本不用点进去看。到最后基本都是加群卖课,准备开始割你,这些人想钱想疯了。 一月份的时候 CNBC、The Daily Show、各个行业的博主都来了,人人都可以评价 DeepSeek,都可以上来说两句,在自己行业的视角。这很正常,没问题,但是就像盲人摸象,只知道部分事实,那不是事实。《事实》里面,人们只会报独特的消息,所有的媒体才不会浪费时间去编造那些不符合我们基本本能的故事。 与其听一些“砖家”高谈阔论,说一些没有味的屁话,不如自己真正找到一手或者近一手的资料,去学点真东西。 背景介绍 这里只做大语言模型和扩散模型相关的内容推荐,更深层次的机器学习,神经网络,深度学习里面种种细节其实也不用完全掌握。只要会用就行了,很多底层细节是不需要知道的。 你不需要有高性能的 GPU,也不需要有足够的编程知识,更不需要了解 TCP/IP,不需要了解 TCP 粘包,TCP Sequence,就是个简单的 HTTP 请求,也不需要了解 OAuth2 协议,甚至也不需要充钱,只需要注册 DeepSeek 或者 Kimi 账号,使用它们的平台生成一个 API Key 放到 Authorization: Bearer 后面即可,最后面有演示内容。本质上就是根据你输入的内容,结合大模型“学习”过的知识,给你回答。 幸存者偏差 可能或多或少看到谁谁谁用 Cursor,毫无编程经验,就写出一个 xx APP,赚到了钱。对,没错,这些是真的,但是只是部分事实。不是所有人都可以这样,并且好的软件,它是要维护的,是要人来参与的。就算你用 Cursor 写出了这样的 APP,但是它是要不断迭代的,要重构,要写良好的 AAA 单元测试。这些,Cursor 还差一点,并且我在工作中很少见到人写测试代码,但是如果你真的编程到了一定程度,你就会发现,写好规划文档占三分之一时间、单元测试和集成测试等其他测试占用一半时间,测试才是软件开发最重要的事情,开发其实只是占用六分之一的时间。 并且,如果不懂 Git,不了解 GitLab、Github,毫无软件开发经验,用 Cursor 写出来的东西,不会做版本控制,也不知道提交到远端仓库,本地电脑坏了,或者其他意外情况,代码全丢了,那就全完了。就算了解 Git,也不了解软件开发推崇的敏捷开发,项目管理,版本变更兼容,需求和实现需要定期同步等等的坑,光有想法和结构化思维,是做不出来可迭代的,优秀的产品。没有人能一次性写出完美的代码,就算是 Linux Kernnel 的代码,也有大约 20% 的提交都是重构的代码,重构非常重要。重构的前提,是编写良好的单元测试。 ...

March 8, 2025

原则

对我而言,有意义的工作是指一项我能全身心投入的使命;有意义的人际关系是指我既深深地关心对方,对方也深深地关心我。 我发现,我能够成功的唯一途径将是: 1.找到与我观点不同的最聪明的人,以便自己能够努力理解他们的推理。 2.知道自己在什么时候不能有明确的意见,不急于下结论。 3.逐步归纳永恒和普适的原则,对其进行测试,将其系统化。 4.通过平衡风险来保持较大的回报,并降低下行波动。 我逐渐认识到,股价反映了人们的预期,所以当实际结果比预期好时,股价上涨;当实际结果比预期差时,股价下跌。而大多数人会因为近期的经验而产生偏见。 通过市场交易赚钱是很困难的。对此,才华横溢的交易者和投资家伯纳德·巴鲁克形象地说道:“如果你已经做好准备放弃一切其他东西,像医科学生研究解剖一样仔细地研究市场的整个历史和背景,并研究所有主要上市公司——如果你能做到上述的一切,同时你还拥有赌博者的镇定、洞察者的第六感和狮子的勇气,你才有可能抓住一丝机会。” 我了解到,如果你以勤奋和有创造性的方式工作,你几乎可以得到你想要的任何东西,但你不可能同时得到所有东西。成熟意味着你可以放弃一些好的选择,从而追求更好的选择。 就我们一致同意的相处规范而言,最重要的一条是,我们需要做三件事: 1.把我们的真实想法摆在桌面上; 2.存在经过深思熟虑的分歧,但人们愿意在相互了解的过程中更改观点; 3.如果分歧依然存在,拥有一种大家一致同意的决策方式(如投票或者拥有清晰的权威),以便我们能够不带怨气地把分歧留在身后。 管理的资金太多有可能损害业绩,原因是太大的规模会影响市场走向,导致建仓和平仓的成本很高。在2010年实现超过40%的收益率后,我们不得不考虑向客户退回很多资金,尽管他们其实希望将更多的钱交由我们管理。我们一直谨慎地让自己不要变得过大,以免竭泽而渔。 在我看来,人生由三个阶段组成:在第一个阶段,我们依赖其他人,我们学习;在第二个阶段,其他人依赖我们,我们工作;在第三个阶段,当其他人不再依赖我们、我们也不必再工作时,我们就可以自由地体验生活了。 王岐山:有能力的人居安思危。安然无忧的是愚人。假如冲突能在变得尖锐之前被解决的话,世界上就不会有英雄了。 做到头脑极度开放、极度透明 对于快速学习和有效改变而言,头脑极度开放、极度透明是价值无限的。学习过程是一连串的实时反馈循环:我们做决定,看到结果,然后根据结果改进对现实的理解。做到头脑极度开放能够增强这些反馈循环的效率,因为这能让你和其他人无比清晰地看到你在做什么、为什么这么做,而不会产生误解。你的头脑越开放,你就越不会自欺,其他人也就越会给你诚实的反馈。如果他们是“可信”的人(知道什么样的人是“可信”[插图]的也很重要),你就会从他们那里受益良多。 不要担心其他人的看法,使之成为你的障碍。 拥抱极度求真和极度透明将带来更有意义的工作和更有意义的人际关系。 人在尝试理解任何东西(经济、市场、天气等)时,都可以从两种视角出发: 1.自上而下:努力找到这些东西背后的唯一驱动法则或规律。例如,在理解市场时,人可以研究影响所有经济和市场的普适法则,如供求关系;在理解物种时,人可以集中了解基因密码是如何对所有物种发生作用的。金字塔原理,结构化思维。 2.自下而上:研究每种具体情况及其背后的法则或规律,例如,小麦市场独特的法则或规律,或者使鸭子区别于其他物种的基因序列。 痛苦+反思=进步 如果你能养成一种习惯,面对精神痛苦时能够自动地反思痛苦而不是躲避痛苦,你将能够快速地学习和进化 生活中的大多数东西都不过是“同类情况的重演”。 但大多数人缺乏勇气克服自身弱点,也缺乏勇气做出这一改变所要求的不容易做出的抉择。归根到底,这可以总结为以下5项抉择:1.不要混淆你的愿望和事实。 2.不要为自身形象担心,只需关心能不能实现你的目标。 3.不要过于重视直接结果而忽视后续、再后续的结果。 4.不要让痛苦妨碍进步。 5.不要把不好的结果归咎于任何人,从自己身上找原因。 在我看来,个人进化过程(即我在上一条描述的循环)通过5个不同的步骤发生。如果你能把那5件事都做好,你几乎肯定可以成功。这五步大概是: 1.有明确的目标。 2.找到阻碍你实现这些目标的问题,并且不容忍问题。 3.准确诊断问题,找到问题的根源。 4.规划可以解决问题的方案。 5.做一切必要的事来践行这些方案,实现成果。 有明确的目标 排列优先顺序:尽管你几乎可以得到你想要的任何东西,但你不可能得到你想要的所有东西。我的事情只有两类,重要的和紧急的,紧急的事情永远都是不重要的,重要的事情永远都是不紧急的。——《架构整洁之道》 不要混淆目标和欲望。合理的目标是你真正需要实现的东西,欲望则是你想要但会阻止你实现目标的东西。欲望通常是直接结果。 调和你的目标和欲望,以明确你在生活中真正想要的东西。 不要把成功的装饰误认为成功本身。 永远不要因为你觉得某个目标无法实现就否决它。 谨记伟大的期望创造伟大的能力。 如果你拥有灵活性并自我归责,那么几乎没有什么能阻止你成功。 知道如何对待挫折和知道如何前进一样重要。 找出问题,并且不容忍问题 把令人痛苦的问题视为考验你的潜在进步机会。 不要逃避问题,因为问题根植于看起来并不美好的残酷现实。 要精准地找到问题所在。 不要把问题的某个原因误认为问题本身。 区分大问题和小问题。我只做重要的事情。 找出一个问题之后,不要容忍问题。 诊断问题,找到问题的根源 先把问题是什么弄明白,再决定怎么做。 区分直接原因和根本原因。在《肥胖代码》里面,你变胖的直接原因是你吃了很多东西,根本原因是胰岛素产生过多且持久。压力大会生成皮质醇,进而产生很多胰岛素。吃精致碳水会比同等卡路里的油脂更容易发胖,因为前者产生更多的胰岛素。一个人酗酒的直接原因是喝了太多酒,根本原因可能是遗传,也有可能是小时候的环境影响。 认识到了解人(包括你自己)的特性,有助于对其形成合理预期。 规划方案 前进之前先回顾。 把你的问题看作一部机器产生的一系列结果。通过俯视你的机器并思考如何改变这部机器以创造更好的结果来从事更高层次的思考。你要站在更高的维度思考问题。 谨记实现你的目标通常有很多途径。 把你的方案设想为一个电影剧本,然后循序渐进地思考由谁来做什么事。 把你的方案写下来,让所有人都能看到,并对照方案执行。 要明白,规划一个好方案不一定需要很多时间。 坚定地从头至尾执行方案 规划做得再好,不执行也无济于事。 良好工作习惯的重要性常被大大低估。 建立清晰的衡量标准来确保你在严格执行方案。 谨记:如果你找到了解决方案,弱点是不重要的。 考察你犯错误的类型,并识别你通常在五步流程中的哪一步上做得不好。 每个人都至少有一个最大的弱点阻碍其成功,找到你的这个弱点并处理它。 影响合理决策的两个最大的障碍是你的自我意识和思维盲点。 ...

March 3, 2022

云顶之弈如何从零到最强王者

前言 我玩了比较久的云顶之弈,也**“间接开发”过阵容**,就是 S3 最火热的 6 暗星羊刀水银泽拉斯。最快两天从水晶之痕没有段位到超凡大师(后面排到人比较慢,不愿玩,而且段位提升只是把数的堆积)。我也是美服以及艾欧尼亚两个赛季超凡大师,最高到一区前 200 名左右吧,3 月 26 日左右(具体几号真忘了)早上8 点斗鱼、卷子的第一把,和南波儿的两个小弟的7点多到8点那一把的录播视频为证。 只要你时间够,上个王者不成问题。后面比较喜欢玩 PBE(测试服),提前感受版本,厄加特的大招开始是没有写明无视复活甲的,也是我向官方报告的 “bug”,后面官方改了技能说明,之前的英文介绍里面没有 GA(Guardian Angel)。其他的大家都知道的 bug,我也不愿向官方反馈。 第三个,仅需两天(一天16个小时左右),50 多把即可从零上超凡大师,多的 8 把左右是打的维护赛。 玩游戏也是要学习的,也是要动脑子的,只有不断进步,不断精进,才能更好去玩游戏。其他的下棋类的游戏,我也玩过,其实 TFT 大多都是抄 Dota 自走棋的,做得越来越像了,只不过简化了而已。 {% tabs content-1 %} {% endtabs %} 基础 这里主要讲些基础按键,以及鼠标操作“抢”英雄,抢装备。 按键 D D 牌,换下一轮牌。D 一次需要 2 金币,具体几费英雄概率,看右下角 F 升级,在左下角有对应的当前经验以及升级所需经验。一次升级需要 4 金币,一级对应着可以上一人口,8 级代表至少可以上 8 人口。3-2 和 4-1 是一些快节奏的上人口搜排阵容时间。例如法师,3-2 升 6,D 牌,4-1 升7 D牌,靠质量和血量赢,这就意味着 2 阶段不能乱升级,最大化保留经济。 ...

December 18, 2020

RowKey 设计规约

RowKey 尽量简短 Data Block 是 HBase 中文件读取的最小单元。Data Block中主要存储用户的KeyValue数据,而KeyValue结构是HBase存储的核心。HBase中所有数据都是以KeyValue结构存储在HBase中。 KeyValue由4个部分构成,分别为Key Length、Value Length、Key和Value。其中,Key Length和Value Length是两个固定长度的数值,Value是用户写入的实际数据,Key是一个复合结构,由多个部分构成:Rowkey、Column Family、Column Qualif ier、TimeStamp以及KeyType。其中,KeyType有四种类型,分别是Put、Delete、DeleteColumn和DeleteFamily。 HBase中数据在最底层是以KeyValue的形式存储的,其中Key是一个比较复杂的复合结构。 这也是HBase系统在表结构设计时经常强调Rowkey、Column Family以及ColumnQualif ier尽可能设置短的根本原因。列族一般情况下设置为 1 个。 ——《HBase 原理与实战》 等长 类似桶排序规则。 ID 在前 <user_id><业务字段> 优先级排序 高频查询的越靠前

September 25, 2020

For Interview

前言 仅供本人面试前准备,其他人还是别看了,没意义。有很多我缩写,省去了很多易理解的部分。 我尽量找别人已经总结过的东西,而不是自己写,无意义,面试的八股文罢了。都是靠努力就能实现的东西。 常见容器 ArrayList 详解 https://note.youdao.com/ynoteshare1/index.html?id=efd2a3a29d2626acea2b053e56bae5cc&type=notebook#/04F1A0EFF8F241C2A89E2234AAF0A36A 底层基于数组实现 创建 ArrayList 如果不指定大小,会先创建一个大小为 0 的 Object[ ] 数组 , 第一次添加数据时,会扩容成 ArrayList 的 默认大小 default_capacity:10**;** 创建时如果指定大小,直接创建指定大小的Object[ ]数组 add() 对 size+1,去判断数组是否满了,如果满了就调用 grow()方法扩容,扩容大小为,原数组大小 + 原数组大小右移一位。也就是扩容到原来的1.5倍。JDK 1.6 是 1.5 倍 +1 ,JDK 1.7,1.8 是 1.5 倍。 然后把老数组拷贝到新数组里 elementData = Arrays.copyOf(elementData, newCapacity); 最后 elementData[ size++ ] = e,对数组赋值,(并且size+1) add(index,e) 首先对index做数组越界检查rangeCheck(index); 如果越界了,抛数组越界异常 如果没越界,还是对 size + 1,判断是否需要扩容,如果需要扩容,调用grow方法 如果需要扩容,调用System.arraycopy(1,2,3,4,5)方法。参数解释1:原来的数组,2:从哪里开始复制。3:复制的目标数组。4:目标数组的第几位开始复制。5:一共复制几个数。 System.arraycopy(elementData, index, elementData, index + 1, size - index); 假设把数字6插入到第3位,复制过后的数组是,1 2 3 4 5 -> 1 2 3 3 4 5 然后再把目标的位置的值修改,变为 1 2 6 3 4 5 最后size++; set(index,e) 首先解释,set这个方法是替换该位置原来的元素,所以不会使数组变大,不会做扩容判断 然后对index做数组越界检查,如果越界了,抛数组越界异常 把e替换到数组的index位置 返回数组index位置的原始值 remove(index) 首先对index做数组越界检查rangeCheck(index);,如果越界了,抛数组越界异常 然后进行数组拷贝 System.arraycopy(elementData, index+1, elementData, index,size - index - 1); 假设把第三位数字删除,1 2 3 4 5 6 - > 1 2 4 5 6 6 然后 element[size–] = null; 最后返回被删除的值 get(index) 首先对index做数组越界检查rangeCheck(index);,如果越界了,抛数组越界异常 return elementData(index); 总结来说,AraayList的get方法效率非常高,直接返回对应下标值,add方法和remove方法,效率就有点低了,需要考虑数组扩容和数组拷贝的问题**。** ...

July 29, 2020

Mac 下 Docker 更改国内镜像源

打开 DockerDesktop 如果你有其他配置改了的,直接复制这个,记住前面的逗号不要删 ,"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"] 如果你之前什么都没改,复制粘贴下面内容 { "debug": true, "experimental": false, "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"] } 如果在上图的界面报错,不能改 打开 Terminal 进入 Users/YourName目录下,复制粘贴进去 cd .docker vi deamon.json 重启docker,镜像生效 {% note danger %} 如果 docker 点 prefrence一直在更新状态,检查一下daemon.json 文件是否格式正确 {% endnote %} 如果不想换镜像源,可以开代理 别问我什么是代理,问就是不知道 我的本地代理端口是10080,你要是服务器的话,http://[ ip address]:[port] 像这样 二选一,别两个都写,或者打开 terminal, export ALL_PROXY=socks5://127.0.0.1:10080; export http_proxy=socks5://127.0.0.1:10080; export https_proxy=socks5://127.0.0.1:10080;, 终极方案 Dockerfile FROM 你的服务器后,加上,Docker Compose 建议下一种方法。 ENV http_proxy <HTTP_PROXY> ENV https_proxy <HTTPS_PROXY> 打开终端后设置 export http_proxy="<HTTPS_PROXY>" export https_proxy="<HTTPS_PROXY>" 引用 https://www.jianshu.com/p/419eaf4425a6 http://pangguoming.com/blog/architecture/docker-configuration-file-daemon.json ...

July 16, 2020

Effective Java(with Spring core)

电子原版目录以及概要 请购买实体书籍,支持作者、翻译以及出版社 Creating and Destroying Objects 用静态工厂方法代替构造器 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 静态工厂方法与设计模式中的工厂方法模式不同。并不能直接对应设计模式的工厂方法。 优势 有名字(像这种BigInteger.probablePrime(int bitLength,Random rnd)) 不必每次调用他们的时候,都创建一个新对象。像Integer.MAX_VALUE = 0x7fffffff(享元Flyweight模式)真正的享元模式如下,Integer中有个私有静态类,叫IntergeCache 可以返回原返回类型的任何子类型的对象。Java8允许接口中含有静态方法,Java9允许接口中有私有的静态方法,但是静态域和静态成员变量仍然需要是公有的。 所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值。 方法返回的对象所属的类,在便携包含该静态工厂方法的类时可以不存在。 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; /** * 这里定义了最大值,也就是说这个可以配置 * -XX:AutoBoxCacheMax=NNN,这里的 NNN 表示最大值是多少,只能改最大值,不能改最小值。 * 在设置了-XX:+AggressiveOpts启动参数后,AutoBoxCacheMax的默认值会被修改为20000并且生效。 * 这里的 -XX:+AggressiveOpts 是表示加快编译 * aggressive adj.好争斗的, 挑衅的, 侵略性的 * export JAVA_OPTS="-Xms2048m -Xmx2048m"。 * 合起来翻译 积极的选择 * - Tired compilers (hoping that it will make it into JDK7) * - Scalar replacement (and I am still hoping that this will remove some of the memory throughput preassure 64-bit brought) * EA and stack allocation * Code cache */ String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} } 缺点 ...

June 18, 2020