[转载] Java 性能优化技巧集锦 (6)

Material Types,SAP 物料主数据里最容易被低估的控制开关 摘要:SAP中的物料类型(Material Type)远非简单的分类标签,而是物料主数据的核心控制机制。它决定了物料编号分配方式、字段选择、屏幕顺序、视图可用性等关键属性,并影响采购、生产、库存和财务等业务流程。标准物料类型如ROH(原材料)、HALB(半成品)、FERT(成品)等各具独特的控制逻辑,项目配置时需结合业务特性谨慎设计。物料类型还关联着采购类型、组织视图、财务核算等深层控制,因此在SAP实施中必须从业务管理角度进行整体规划,避免随意新增类型导致系统复杂化。 阅读详情
http://tech.ccidnet.com/pub/article/c1077_a199225_p6.html
5. 延迟重画操作

对于图形用户界面的应用来说,性能低下的主要原因往往可以归结为重画屏幕的效率低下。当用户改变窗口大小或者滚动一个窗口时,这一点通常可以很明显地观察到。改变窗口大小或者滚动屏幕之类的操作导致重画屏幕事件大量地、快速地生成,甚至超过了相关代码的执行速度。对付这个问题最好的办法是忽略所有“迟到”的事件。

建议在这里引入一个数毫秒的时差,即如果我们立即接收到了另一个重画事件,可以停止处理当前事件转而处理最后一个收到的重画事件;否则,我们继续进行当前的重画过程。

如果事件要启动一项耗时的工作,分离出一个工作线程是一种较好的处理方式;否则,一些部件可能被“冻结”,因为每次只能处理一个事件。下面提供了一个事件处理的简单例子,但经过扩展后它可以用来控制工作线程。

       
        public static void runOnce(String id, final long milliseconds) {
synchronized(e_queue) {
// e_queue: 所有事件的集合
if (!e_queue.containsKey(id)) {
e_queue.put(token, new LastOne());
}
}
final LastOne lastOne = (LastOne) e_queue.get(token);
final long time = System.currentTimeMillis(); // 获得当前时间
lastOne.time = time;
(new Thread() {public void run() {
if (milliseconds > 0) {
try {Thread.sleep(milliseconds);} // 暂停线程
catch (Exception ex) {}
}
synchronized(lastOne.running) { // 等待上一事件结束
if (lastOne.time != time) // 只处理最后一个事件
return;
}
}}).start();
}
private static Hashtable e_queue = new Hashtable(); private static class LastOne {
public long time=0;
public Object running = new Object();
}
       




6. 使用双缓冲区

在屏幕之外的缓冲区绘图,完成后立即把整个图形显示出来。由于有两个缓冲区,所以程序可以来回切换。这样,我们可以用一个低优先级的线程负责画图,使得程序能够利用空闲的CPU时间执行其他任务。下面的伪代码片断示范了这种技术。

       
        Graphics myGraphics;
Image myOffscreenImage = createImage(size().width, size().height);
Graphics offscreenGraphics = myOffscreenImage.getGraphics();
offscreenGraphics.drawImage(img, 50, 50, this);
myGraphics.drawImage(myOffscreenImage, 0, 0, this);
       


7. 使用BufferedImage

Java JDK 1.2使用了一个软显示设备,使得文本在不同的平台上看起来相似。为实现这个功能,Java必须直接处理构成文字的像素。由于这种技术要在内存中大量地进行位复制操作,早期的JDK在使用这种技术时性能不佳。为解决这个问题而提出的Java标准实现了一种新的图形类型,即BufferedImage。BufferedImage子类描述的图形带有一个可访问的图形数据缓冲区。一个BufferedImage包含一个ColorModel和一组光栅图形数据。这个类一般使用RGB(红、绿、蓝)颜色模型,但也可以处理灰度级图形。它的构造函数很简单,如下所示:

       
        public BufferedImage (int width, int height, int imageType)
       


ImageType允许我们指定要缓冲的是什么类型的图形,比如5-位RGB、8-位RGB、灰度级等。



8. 使用VolatileImage

许多硬件平台和它们的操作系统都提供基本的硬件加速支持。例如,硬件加速一般提供矩形填充功能,和利用CPU完成同一任务相比,硬件加速的效率更高。由于硬件加速分离了一部分工作,允许多个工作流并发进行,从而缓解了对CPU和系统总线的压力,使得应用能够运行得更快。利用VolatileImage可以创建硬件加速的图形以及管理图形的内容。由于它直接利用低层平台的能力,性能的改善程度主要取决于系统使用的图形适配器。VolatileImage的内容随时可能丢失,也即它是“不稳定的(volatile)”。因此,在使用图形之前,最好检查一下它的内容是否丢失。VolatileImage有两个能够检查内容是否丢失的方法:

       
        public abstract int validate(GraphicsConfiguration gc);public abstract Boolean contentsLost();
       


每次从VolatileImage对象复制内容或者写入VolatileImage时,应该调用validate()方法。contentsLost()方法告诉我们,自从最后一次validate()调用之后,图形的内容是否丢失。虽然VolatileImage是一个抽象类,但不要从它这里派生子类。VolatileImage应该通过Component.createVolatileImage()或者GraphicsConfiguration.createCompatibleVolatileImage()方法创建。

9. 使用Window Blitting

进行滚动操作时,所有可见的内容一般都要重画,从而导致大量不必要的重画工作。许多操作系统的图形子系统,包括WIN32 GDI、MacOS和X/Windows,都支持Window Blitting技术。Window Blitting技术直接在屏幕缓冲区中把图形移到新的位置,只重画新出现的区域。要在Swing应用中使用Window Blitting技术,设置方法如下:

       
        setScrollMode(int mode);
       


在大多数应用中,使用这种技术能够提高滚动速度。只有在一种情形下,Window Blitting会导致性能降低,即应用在后台进行滚动操作。如果是用户在滚动一个应用,那么它总是在前台,无需担心任何负面影响。(T117)
ALE 物料主数据字段选择,MAL1、MAL2 与 MM01、MM02 背后的控制逻辑 摘要:SAP物料主数据分发(ALE)中最容易被忽视的问题不是IDoc配置错误,而是字段是否可被写入。系统会像标准事务(MM01/MM02)一样执行检查,包括字段状态和必填校验。关键点在于ALE使用独立的事务引用(MAL1/MAL2),与在线维护(MM01/MM02)分离,可分别设置字段控制规则。当WE02显示字段有值但未更新时,需检查接收系统对应事务(MAL1/MAL2)的字段状态配置,而非仅排查IDoc传输。必填字段检查适用于所有维护方式(包括ALE),历史数据可能因新增必填要求而无法传输。 阅读详情

相关推荐

从 Materials List 到物料主数据治理,SAP 物料清单查询的真实价值

摘要 Material List在SAP MM模块中不仅是物料查询工具,更是主数据治理的关键入口。它通过物料编号、工厂、物料类型、物料组等筛选条件,有效解决企业面临的重复建料、跨工厂扩展和主数据治理问题。系统输出的物料描述、基本单位、价格控制等字段具有重要业务意义,能帮助识别数据异常。在制造业场景中,Material List常用于新品发布前的查重、工厂扩展判断和月结检查。从技术角度看,其数据模型涉及MARA、MAKT、MARC和MBEW等核心表,开发时需注意估价层级等关键配置。该工具在物料主数据管理中发挥

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6643

Java性能优化技巧集锦

里面分java通用篇,j2EE篇,GUI篇,EJB篇,缓存的优化等,并且提供了参考的文献

SAP 物料主数据里的 Profile 显示逻辑,MRP profile 与 Forecast profile 的查看方法和项目理解

摘要:SAP物料主数据中的Profile(参数模板)是主数据治理的重要工具,尤其在MRP和预测数据维护中。它不仅是默认值模板,更是企业计划策略的系统沉淀方式。本文详解了如何通过SAP菜单查看Profile的Selection Screen(字段范围)和Data Screen(具体值),强调这是排查主数据问题的关键步骤。制造业和零售业应特别关注MRP Profile中的计划参数和Forecast Profile中的预测模型,确保其与业务需求匹配。文章指出,项目上线前必须全面检查Profile设计,避免因模板缺

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4180

细说:AWT,SWT,Swing

[url]http://www.java3z.com/cwbwebhome/article/article2/21005.html?id=1709[/url] Overview概述 Java GUI 工具包一直是一个倍受争议的话题。同样的争论也发生在其他编程语言如Smalltalk。实际上每个平台无关的语言都存在着这样的争论。Java作为当前最受广泛使用的编程语言而尤为突出。 ...

hqs7636的专栏 333

以小博大 Java性能优化技巧集锦

  可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。  一、通用篇   “通用篇”讨论的问题适合于大多数Java应用。  1.1 不用new关键词创建类的实例  用new关键词创建类的实例时,构造函数链中的所有构造函数都会

键者天行 6989

JAVA中如何产生透明的VolatileImage

  前方说到产生VolatileImage,是没有透明功能的。有时就需要透明,怎么办?   关键代码如下: public void createVolatileImageTransparency(final JComponent comp, final int width, final int height) { comp.getGraphicsConfiguration().cre...

柳鲲鹏 710

material master物料主数据field selection配置

在使用物料主数据相关TCODE进入相关屏幕时(以MM01为例),我们会发现在不同的项目里,有些屏幕字段是必输项,有些不是,有些干脆被隐藏。这个是通过一个叫做field selection的进行配置来起作用的。 field selection与transaction code(MM01 MM02 MM03屏幕字段表现各不相同)  material type; procurement type;ind...

囧囧有神的SAP顾问 660

从物料主数据 Sales 视图看 SAP 销售业务的底层设计

摘要 SAP物料主数据的Sales视图是销售业务的关键基础,直接影响订单创建、价格计算、交货执行等核心流程。该视图不是简单的字段集合,而是连接MM、SD、LE、TM等多个模块的交汇点。其核心在于组织层级的精准控制: 销售组织与分销渠道组合决定物料在不同销售路径下的差异化配置,同一物料可维护不同的价格、单位、状态等属性 销售通用数据分为分销链特定和跨分销链两种类型,支持灵活的状态控制策略 销售组织数据屏幕与价格管理紧密关联,反映不同渠道的定价政策 销售通用工厂数据视图包含关键物流属性,如装载组、运输组等,影响

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 980

SAP S/4HANA 物料主数据里的默认行业部门、视图、组织层级和配置文件

物料主数据维护的效率痛点在于高频重复操作,而非字段复杂度。SAP 通过默认行业部门(Industry Sector)、视图(Views)、组织层级(Organizational Levels)和配置集(Profiles)来优化这一过程。这些预设能根据用户角色自动填充常用值,减少重复选择。行业部门还影响屏幕顺序和字段控制,一旦设定不可修改;默认视图可避免漏选关键业务视图;组织层级预设则需谨慎,避免在多组织场景中出错。这些功能共同实现了维护路径的稳定性,特别适合大批量、标准化物料创建场景,但需根据企业实际情况灵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 781

用 Business Transaction Event 承接物料主数据变更,Material Master 增强里一个容易被低估的老接口

最近在处理 Material Master 相关增强时,我又翻到了一个很有年代感但依然很实用的增强点,Business Transaction Event,也就是很多 ABAP 顾问口中的 BTE。这个东西在 FI 领域更常见,大家一提到 FIBF,脑子里往往想到的是会计凭证、清账、付款、替代逻辑一类的场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 538

SAP SD Material View,销售订单里的物料全景看板

摘要:SAP SD模块中的Material View功能解决了销售人员在订单创建时需频繁切换多个事务码查询分散信息的痛点。该功能将物料主数据、销售视图、库存、价格、替代品等关键信息整合在单一工作台,支持从销售订单直接访问或通过MATERIAL_INFO事务码独立查询。其核心价值在于为销售决策提供上下文关联的完整物料视图,包括替代品推荐、交叉销售、历史交易等业务场景支持。启用该功能需在SPRO路径下配置,并协调销售组织、主数据等多方规则。实施时应优先采用标准功能而非自定义开发,以确保与定价、可用性检查等核心流

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

SAP 物料主数据中的 Profile 创建方法,MRP profile 与 Forecast profile 的设计逻辑

摘要:SAP物料主数据维护中Profile的标准化价值(150字) 物料主数据维护的核心痛点在于同一物料在不同工厂/用户间的维护口径不一致,导致MRP运行结果混乱。SAP提供的Profile机制通过标准化模板(MRP/Forecast profile)解决这一问题:将关键字段预先定义为固定值(强约束)或默认值(可调整),在创建物料时自动带入主数据视图。Profile设计需权衡字段管控力度,区分采购件/半成品/成品等不同物料的策略组合,并通过系统校验避免逻辑冲突(如固定批量与最大库存不可共存)。该机制适用于制

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1847

Material Requirements Planning,物料主数据里的 MRP 不是几个字段,而是一套供需节奏

文章摘要:SAP物料主数据的维护粒度是MRP计划准确性的关键前提。系统通过工厂、库存地点和MRP区域三个层级管理物料计划属性:工厂级MRP参数决定基本供应策略,库存地点可设为独立计划边界(S/4HANA中需转为MRP区域),而MRP区域能实现分包库存等精细化计划。实施时需注意主数据分配(如MRP区域段维护)、参数模板(MRP Profile)应用,以及S/4HANA与传统ECC的架构差异(如库存地点级MRP的迁移处理)。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1178

SAP Material Master 中 Profile 变更的正确打开方式,MRP profile 与 Forecast profile 的字段治理、固定值传递和后台更新机制

摘要: SAP Material Master 中的 MRP/Forecast Profile 不仅是录入效率工具,更是主数据治理策略。Profile 通过区分 default value(可覆盖)和 fixed value(强制规则)实现字段标准化。修改 Profile 时需特别注意:调整 fixed value 会触发系统自动更新所有关联物料主数据,可能影响MRP运行等业务逻辑。变更前需评估字段属性、物料同质性及业务影响,避免批量修改带来的数据风险。Profile 设计应平衡效率与管控,确保主数据质量与

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1578

参考创建生产版本,从 SAP S/4HANA 物料主数据复制到主数据治理的那一步

文章摘要:本文深入解析SAP生产版本(Production Version)的主数据特性与业务价值。生产版本虽看似普通字段,实为连接BOM、工艺路线与生产执行的关键枢纽。文章重点剖析了参考创建物料时生产版本未自动传递的原因,指出MARC_MKAL字段选择配置是核心控制点,并强调标准系统默认不开启该功能的设计考量。通过离散制造和流程行业案例,阐明生产版本在MRP、车间执行和成本核算中的重要作用,揭示了其作为"生产方法定义"的本质。最后从Clean Core角度建议通过标准配置而非开发实现功能扩展,为SAP项目

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1629
上一篇: [转载]Java 性能优化技巧集锦 (5)
下一篇: [娱乐] 且看网友如何奉承搂主
cloudward
博客等级 码龄23年 18粉丝 51原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值