How the jvm assign thread to garbage collection

hi,please answer this question
How the jvm assign thread to garbage collection

So let me get this straight, OP. You dump a load of homework questions on a bunch of total strangers, get a lot of replies, but the only time you bother to respond to that help is to insult someone? Did "thanks" ever occur to you?

Similar Messages

  • 11.5.10.2 & Sun T5220 & threads & Java garbage collection...

    We recently upgraded our prod and test servers (middle tier) to Sun T5220's each with 8 procs which have 8 cores per proc. Apache/Java sees that as having 64 CPUs and configures a garbage collection thread for each. Since we have around 10 test and dev instances for the HRMS the apps instances alone, (we also have several Financials instances on the same server), it was kicking off over 640 threads of garbage collection! Needless to say the contention was overloading the server causing major hassles. We have since updated each $CONTEXT_FILE ADJREOPTS and ADJRIOPTS settings to only kick off 2 threads per instance. This has helped, but we still have issues, especially when running adadmin or adpatch and if we give it more than 8 workers. Has anyone else seen this, and if so, have you had any other solution(s)?
    We are also seeing strange behavior with FNDSM. Unlike the production server, which has much less load in some respects, on the test sever, each apps instances instance of FNDSM is restarting several times a day for no apparent reason and leaving many defunct child processes. We do see a slight hangup in the tnsping to the FNDSM_<server> listener every so often, but never anything long enough that it should be an issue. We also have multiple NICs on the box, but again, that has never been an issue before.
    Anyone else out there using Suns T5220s? Anyone else having any issue(s) with Apache/Java and / or FNDSM?
    thanks,
    -mike

    It appears to be a known issue for the Niagara chips:
    Oracle Applications Installation and Upgrade Notes Release 12 (12.0.4) for Solaris Operating System (SPARC)
    http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=402312.1
    Java Performance on UltraSPARC T1/T2 (Niagara) processors
    There is a known issue with the Java Runtime Environment (JRE) version 5 on Sun's Niagara processor, a one-socket 8 core processor that can run 32 threads in parallel. As the JRE treats the Niagara system as a server class machine, the server appears to the JRE to be a 32-CPU machine and each Java Virtual Machine (JVM) spawns 32 garbage collector threads. Also, newer chips support a larger number of threads (for example, the Niagara 2 will appear as a 64-way server).

  • How the JVM SHOULD be distributed (interesting)

    Well I sent this document to the JCP maybe it will be better off there....
    Sun needs a new JAVA marketing strategy.
    Opinions expressed here are of my own, Matt Prokes, remember these are only opinions about what should or could be.
    If you have ?'s contact me at [email protected]
    What Java's Problem Is:
    As far as I can see the only problem that java has these days is the client inconsistencys, this is due to Microsoft and there attempted dustruction of the HUGE java language, and Microsoft has succeeded wonderfully thus far, which is sad. I feel it is only due to the way Sun markets Java, not that they have not tried but they are going about it the wrong way.
    Sun Feels They Are Being Oppressed:
    It seems to me that Sun has a feeling of being oppressed by Microsoft, they see the company inflicting standards on the computing world that are self centered and platform specific, this is why java was created, to break that mold and it does it wonderfully but java has not gained populatiry because of marketing technique, no, it has gained popularity because it REALLY is what it is cracked up to be....A better way of doing things....
    That is why sun landed the title of being one the the most innovative companys today by the magazine �PC World� ranking 13th place while Microsoft landed 137th (i think).
    Yet with all this technology sun does not try to inflict it's standards on the PC world, well you might think what about all those court cases, for instance the most recent that suggests that Sun wants to FORCE Microsoft to install their JVM. I think stuff like this just slows Sun down, as we learned with previous cases Microsoft is just to big to fight and if you do manage to win it will be 3-4 years later. If you think about it time is money, why waste time? Trying to leach off of Microsoft is NOT the way to inflict standards, infact it is one of the worst ways because by the time you would have won microsoft would have bullied the java enviroment to it's grave (umm .net). So you may ask how do we enforce standards without the help of microsoft, the answer is more simple than you may think yet for some reason it has not been thought of by Sun. So far this is what has brought microsoft to the top.
    1.Great Software
    2.Enforced Standards, and Implementation
    3.Excellent Marketing
    4.Protected Software (Ideas)
    5.Industry Wide Support
    Innovation is not on this list, Microsoft does not have a innovative bone in it's body at the moment, it just buys technology that it needs, and has flashy GUI's, and a huge amount of support in the software industry. This is why according to the magazine �PC World� microsoft ranks #137 in innovation while Sun sits at a satisfying ranking of #13.
    What this means is that Sun just is more innovative, it has technology out there that could be used but it can't because we have clients with Version 1.3 Java software on their PC's, Either that or Propietary and NOT PLATFORM INDEPENDENT Microsoft JVM's which Microsoft will again start to distribute in 2004 on XP, this brings me to my first point, if we are going to have a platform independent language it needs to come from ONE POINT that will be implemented by all Manufactures (the W3C for instance). You may be thinking well how do you enforce the SUN JVM if microsoft does not pack it with windows? The answer is you do what most new companys do and that is goto the PC Vendors. I would like to point out that microsoft is for the most part ONLY a software company (aside from some of there PC products), but they do not build and distribute PC systems, thus microsoft does not control what can go on a PC, I would like to point out the growing Linux threat to windows, more particulary the linux based operating system (Lindows) recently lindows has aquired a deal with walmart to sell there operating system as a subsitute to windows, this worked out phenominaly and right now walmart cannot seem to keep enough of the pc's on the shelves (since they cost only about 199$). Case point linux has also grown enormously due to �Home Editions� of linux (Red Hat). The first point I would like to make is that Sun should be PAYING vendors to install the SUN JVM over the microsoft one, this takes care of a few of Sun's problems (Not as much industry support as microsoft, and upgrading the JVM) all this can be done for a measily 5-6 million a year and will reach about 70% of the PC sector, infact I am almost certain this is how microsoft started out.
    One Of Java's Big Problems JVM Inconsistencys
    Now if Sun locks 70% of the PC market that will already be a large boost for java, but the question is how to make the percentage grow to 100%... I would now like to point out the company Macromedia, macromedia products are phenominal, and have changed the way media is seen on the web, particularly the Flash product that macromedia sells, now at this moment macromedia has stated that >90% flash support exists on the web today and >70% is with the most current version of flash, as I see it infact flash is one of the most universally supported pieces of software even more so than microsoft, this is why you see flash movies on yahoo, cnet, amazon, and even MSN! So you may ask what made flash what it is today? Well as described before flash is supported and installed by PC vendors, and even if it is not you can bearly go any place on the web with out getting a message stating that you should upgrade to the most current version of flash, this is due to the wide support on the web..... Now on the other hand if I run a java applet and the applet was compiled with some new features that were not supported in version 1.3 (Swing for example) we will get an error message stating that the package cannot be found and the applet will not run...You do not get any messages to upgrade, no window prompts, nothing..which brings me to my next point the java compiler should include the code (a pre JVM 1.3 version & microsoft JVM compatiable) that will prompt you to install the most current version of Java you already see default loaders for swing, a plugin check should also be included in all programs to ensure that you have to most recent version, and if you do not then it will send you to the Sun Website, or display a update manager or something. Getting an error saying that the applet packages are not found does not help the user any it only frusterates them, you have to physically provide a remedy to the problem at hand. This should also check to see if the microsoft JVM is installed and if it is prompt to upgrade to the Sun JVM, this will pretty much distroy the use of the microsoft JVM.
    This takes care of the enforcing standards part, braudens the Industry Wide Support, and protects the java enviroment, last but not least you need to promote the software, Java already does this excellently with webservices, and other things but there are more consumers than businesses and Java should also be concentrating more on the excellent 3d support that they have, the networking features of java, ect. Take OpenOffice.org for instance the product has grown emmensly since it has started and much uses Java API's, you would see much growth in Java if you provided other products like Open Office for free, for instance a Quake Like Multiplayer game in Java 3D distributed on an open source enviroment, in applet form (since applets are exclusivly a invention of Java), and then have a couple of servers set up that people can play for free on Sun's site, more networking app's for free, ect. You have to promote some of the more flashy features of Sun this way in order to see more growth and support and for free (learn from linux which is quickly becoming a HUGE threat for microsoft) if sun is making 13 billion a year I see no problem to them sporting a couple of servers with some USEFUL online apps/games/ect that sport how innovative java really is, and if they really need to they can have all the banners on stuff like the online games, take Http://www.runescape.com that sports an average of 10,000 users at any moment using the cross platform Java 3d API and they do it for free! All open source free products should be on Suns website, it shows how strong of a community Sun really is, instead of having it on some other website like www.openoffice.org that only sports Sun's name maybe a few times you might occasionally see a logo.. it would be better to maybe get open office from an address like www.openoffice.sun.com, maybe try a www.games.sun.com address or a www.apps.sun.com and then advertise the stuff that can be found at the Sun website. Sun should be proud to be open source, it is the only thing microsoft can't buy....
    Opinions Of Matt Prokes..
    [email protected]

    Sun should be proud to be open source, it is the only thing microsoft
    can't buy....Thats the only line of your whole pointless post that I read.
    Since when is "sun" open source. I imagine you mean java. Java isn't open source, what makes you think it is? You can get the source for it and modify it to suit ur needs as per the license but this isn't really open source.. is it?
    Anyway, don't waste space with your crap here, send an e-mail to somebody at sun instead, its just a waste posting this here.

  • How does the JVM handle private class parameters in a utility class?

    If I have a class that is public and not labeled as static, but it's constructor is private so that it cannot be instantiated, and all of its parameters and methods are both private and static. The methods modify the private parameters. In this case, the code explicitly is avoiding a singleton pattern, so there isn't even a class being instantiated, so this is a true utility class.
    However, the static methods are accessible from multiple objects, and as far as I can tell, the JVM is persisting the parameters in memory beyond the specific thread that called the static method to begin with.
    The question I have is how the JVM handles this? Are these private parameters assigned memory and are indeed persisted independent of thread, since there is no class reference. I am working with byte code injection, and the assumption is that a direct reference to a static parameter is much faster to call than having to go through an object reference. Of course, from a programmer point of view, I much prefer the singleton pattern since I am so used to hang my hat on a class reference.
    Thanks.

    entguru wrote:
    However, the static methods are accessible from multiple objects...Not if the methods are private, as you seemed to indicate ("all of its parameters and methods are both private and static").
    Are these private parameters assigned memory and are indeed persisted independent of thread, since there is no class reference. There is a class reference. It refers to the class, and is obtainable via the class literal; e.g., MyClass.class.
    ~

  • Garbage Collection: how many objects are created after for loop?

    Please see the fallowing java code
    1 public class Test1 {
    2     
    3     public static void main(String[] args) {
    4          
    5          MyObj obj = null;
    6          for(int i=0;i<5;i++){
    7               obj = new MyObj();
    8          }
    9 // do something
    10
    11     }
    12 }
    so my question is How may objects are eligible for garbage collection at line no: 9 (// do something)?

    so my question is How may objects are eligible for
    garbage collection at line no: 9 (// do something)?It's impossible to answer that question since we don't know how MyObj is implemented.
    Kaj

  • How does the JVM call Windows GDI Text functions?

    I need to find out how the JVM calls Windows GDI functions for Java running on Windows. I am a programmer at an imaging software company and we "hook" to client applications to extract information for searching and indexing. Basically what we do is tell the app to refresh itself and then we intercept the text output functions to the GDI. Recently, when trying to image enable an Oracle app (Sun JVM or bastard version thereof), we failed to capture any text output. None of the documented MS GDI text output functions are being called to display that text. Does anyone with an intimate knowledge of the workings of the JVM on a Windows platform know how this is accomplished. I currently have calls pending at Sun and Microsoft, but sometimes these forums have more info than they do. Thanks in advance for any help you can provide. ([email protected])
    Jason Nix

    I would venture to say that SUN is generating its own
    text. That would be necessary in order to handle all
    of the sizing and layout management issues which
    happen in Java real time, as opposed to Windows once
    at compile time.Not likely. Font rendering is always done at runtime and it would be generally unwise to do it yourself given the availability of TrueType fonts and the highly optimized rendering engines. I would be shocked if Sun tried to do it themselves.
    Chuck

  • Query weblgoic runtime JVM and thread that carry the user credential

    Hi there,
    So far as I know, weblogic keeps track of user credentials from
    different JVM and different thread. However, for the same thread within
    same JVM, weblogic only keep on user credential in the EJBContext. So,
    is there any way or any API for me to query the JVM and thread that
    carries the user credential? My purpose is to prevent second login from
    the same JVM in the same thread.
    Thanks,
    Cathy

    Hi there,
    So far as I know, weblogic keeps track of user credentials from
    different JVM and different thread. However, for the same thread within
    same JVM, weblogic only keep on user credential in the EJBContext. So,
    is there any way or any API for me to query the JVM and thread that
    carries the user credential? My purpose is to prevent second login from
    the same JVM in the same thread.
    Thanks,
    Cathy

  • Full Garbage Collection

    Hi Friends,
    I'm using weblogic workflow for my project. Last night i got one error, once i gone throw the bea ...i come to know that the error will comes because of "once the application calls webservice and the webservice intern calls the EJB stateless or stateful will fail". But my application is not using any sort of webservices. So i try to find the problem finally i found tht the problem is because of Garbage collection of Heap Size. It is taking 3.8508577 sec's. I feel in this time the JVM thread gets heighest priority and it is killing the application thread which is to be executed as usal.
    Can u guide me how to catch this exception so tht my application won;t get affected. The actual error says like this which is related to Garbage Collection...[Full GC 313152K -> 105060K (1004928K), 3.8508577 secs]. I'm using JDK 1.4.
    Thaks & Regards
    [email protected]

    Replies in this thread.

  • Preventing garbage-collection of a RMIRegistered server object

    I am developping a client/server RMI application, and keep facing occasional ObjectNotFioundException: no such object in table, when the client tries to invoke method on the server stub retrived from the RMIRegistry.
    The Javadoc and online documentation say this means the server object has been GC'ed since it has been registered in the RMIRegistry.
    Following the advice found at: http://www.nabble.com/java.rmi.NoSuchObjectException:-no-such-object-in-table-t260095.html,
    I register the server in a RMIRegistry I obtain through LocateRegistry.getRegistry(), and not createRegistry().
    But I still face these exceptions.
    Assuming the issue is really due to the server object being garbage-collected, I tried to keep a static reference to the server but it didn't help (the Main class was probably garbage-collected itself).
    As a last hope, I've set up a "keep-alive" thread in the server VM, that keeps a direct reference to the server object (not the stub), and regularly invokes something on it. With this mechanism I never face the exception.
    This solution looks obviously clumsy.
    Is there a neater way to prevent garbage collection of the server object?
    Note that I use dynamic stubs (Java5-style).

    Without seeing some code, I'm not sure what you are doing. Also the link you supplied is broken.
    You always need to keep a live reference to your implementation class. How you do this is your business. Using a separate thread is over-kill.
    I set a reference to the implementation class in the start up class and use a never ending wait() to make sure the start up class thread (with the main()) lives forever.

  • Runtime.getRuntime().exec() and Garbage Collection

    I am programming a piece of software in both Java and C that has some strict real time requirements. Garbage collection, which pauses all threads in Java, sometimes causes loss of incoming data. In order to get around this, I am thinking to start another process using Runtime.getRuntime().exec("c_program") and using interprocess controls (in a UNIX environment) to retrieve data from the new process.
    My only worry is that the Process created by the above call would be a child process of whatever JVM thread created it, (as far as I understand, the JVM implementation in Unix uses multiple processes) and would also be paused when garbage collection occurs. Does anyone know the implementation of the exec functionality and the JVM well enough to say that this will or will not happen?
    Thanks in advance,
    Benjamin

    You're going to create a whole new process? I don't
    know what a "child process" means, but Runtime.exec()
    gets the operating system to produce an entirely new
    process, outside the JVM. However if it produces
    output on stdout or stderr, you're going to have
    threads in your JVM that read that output, otherwise
    that process will hang.
    Why is your idea better than just calling the C
    program via JNI?Thank you both for your replies. My plan was to create a whole new process, yes. In UNIX, a process C is created by another process P using fork() or the exec() family. Process P is then the parent of process C, and process C is the child of Process P. P has an amount of control over C since it can send various signals to pause, kill, etc to C.
    My concern was that the JVM implementation would use these signals to implement the pause of all threads before garbage collecting. If it did, it may also pause the Process that it spawned from the Runtime.exec() call. Pausing my C program in this manner would cause the loss of data I was trying to avoid in the first place.
    My plan for the new process was not to produce anything on stdout or stderr, but to pass data back to the JVM using ipc (interprocess communication) resources of UNIX. I would have to use the JNI to access these resources.
    The whole reason for wanting to do this is to avoid the pause during garbage collection that all Java Threads experience. If I were just to call the C program through the JNI with a normal Java Thread as I think you were suggesting, this Java Thread would still be paused during garbage collection.
    To the second reply about RTSJ, I had heard about this but couldn't find info about it! Thanks for the link. I'm checking it out at the moment. The java runtime must be considerably different for the specifications I see that they guarantee.
    Again, thanks for the replies,
    Benjamin

  • Full Garbage Collection Problem

    Hi All,
    We are working on NetWeaver Application Server JAVA 7.0
    I am getting an error message in of the the EWA reports for JAVA system. The red alert says as below:
    The maximum ratio of full garbage collections to total garbage collections in the reported interval was higher than 90%.
    In order to solve the above problem, I increased Heap Memory for all JAVA Server nodes to 3072 (earlier it was 2048 for all the server nodes). However, still I am getting same error in EWA report.
    Can any one help me in further analysing and solving the above problem?
    Your help is appreciated.

    Here are links to some of the tools. I have worked with [IBM GC for IBM JVM|http://www.ibm.com/developerworks/java/library/j-ibmtools2/index.html]. You may have to try others that can read Sun JVM's GC log.
    http://www.tagtraum.com/gcviewer.html
    http://www.yourkit.com/overview/index.jsp
    https://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPJMETER
    http://java.sun.com/performance/jvmstat/visualgc.html

  • [JS] $.gc() - garbage collection, etc.

    Hello everyone, bear with me for all the questions.
    $.gc() - Initiates garbage collection in the JavaScript engine.
    Ok, maybe I have a fundamental misunderstanding of things here, but I am wanting to understand a few things:
    I was wanting to know if $.gc() can be called and executed outside of running scripts directly from with in the ESTK toolkit? The reason I ask is that its listed in the tools guide but not the javascript reference. I know things like $.writeln() only seem to apply/display from with in the ETSK toolkit, is it still executed otherwise silently when it appears in a script, $.sleep() works fine when used. So what about $.gc(), can I call it and have it execute from within my scripts outside of running them via the ETSK toolkit?
    Is there a way to test if its in fact being called, executed, working? I have seen people talking about calling it twice and doubling up, $.gc() $.gc(), thus does it even work, or is it just a fabled mythical thing.
    Do codes when executed outside the ETSK toolkit get funneled through the same javascript runtime engine that they do when executing from with in the ETSK toolkit? Is it all the same and the ETSK toolkit is just Adobe's GUI for writing, debugging, targeting different api's for the various programs with in the same underlying engine?
    Does ScriptBay tap into and use this same underlying framework? Does it do anything inherently on its own for garbage collection? (since it can run scripts sequentially, repetitively, etc..)
    Does anyone know what embedded javascript runtime/engine Adobe is using? This would be beneficial for any specific optimizations that can be considered or kept in mind in general based on the specific JS engine thats implemented when coding.
    So aside from the mythical $.gc() , what other best practices for garbage collection should be considered? I know people suggest wrapping your codes in a function, talk of #targetengine (saw in InDesign forum), etc… are there any other common do's and dont's, best practices pertaining specifically to illustrator? Granted I can find a lot about Javascript in general across the web but what about how it applies to Illustrator, its api, limitations, performance, garbage collection, etc..
    Thanks. ;-)
    Again, sorry for all the questions, I am still trying to continue to wrap my head around different aspects of this whole thing. Thanks everyone for any feedback your able to offer and provide. Many thanks in advance, its greatly appreciated. Thanks again.

    I can't answer or help with all of those… Here are my thoughts… The dollar object properties and functions can be called on by script from AI, BR, ID & PS… They are NOT restricted for use in the ESTK tookit. Yeah $.writeln() would write to the console if the toolkit were open if NOT then it will probably launch it… So remove or comment these out. As you can see from $.sleep() it does what it says when run in the host app. #targetengine is exclusive to ID this app can have multi-instances ( or something like that ). The other apps have 1 engine and thats it. AI's engine is persistent so wrapping your code is good practice I do this for BR & PS too… See…
    http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/illustrator/scrip ting/readme_cs5.txt
    As for garbage collection I've never fould the need to use it… I see some like to set variables back to null but again I don't do this…
    You would have been better off asking this question in the ID scripting forum… There are several people there who are better qualified to answer some of this…

  • RE unregistering an event listener so it can be garbage-collected

    One good practice in AS 3 is: When you register and event listener with an object, be sure your program also eventually unregisters that listener.
    So, let's say you created an <mx:RemoteObject> and the result listener did its job; you now have the data in an ArrayCollection or something, so you don't need the listener any longer.
    Question: how do you now unregister that result listener?
    Carlos

    That good practice only really applies to long-lived objects with short-lived listeners. Typically, when you are declaring a listener in MXML, it will be a method of your MXML component, so it will not be garbage collected anyway until your component is garbage collected. Normally, this is fine--there is no need to micro-manage the garbage collector unless your listener needs to allocate massive amounts of memory for whatever reason.
    If you really want to do this anyway, you can register the listener as an anonymous function and then call something like
    idOfRemoteObject.removeEventListener(ResultEvent.RESULT, arguments.callee);
    in the listener, but I think this is overkill. When your app is done with the component and the component is elligible for garbage collection, the listener will go with it.

  • On the printing slowness of Postscript produced by the JVM from calls to Graphics.drawString() (Linux/Unix)

    Happy new year,
    before the holidays my attention was drawn to an issue that supposedly the Postscript produced by the JVM is too big and hence too slow.  Here are my findings.
    The issue
    Text printing via CUPS to native Postscript printers can be slow. Printing a terms and conditions page (17000 characters/page) takes three and a half minutes to print on a Dell 2330 dn laser printer (96 MB,Max speed 33 ppm). The file is about 8 MB in size. To contrast that, rendering the text to a buffered image with 300 DPI and printing the result produces 7 MB of output which prints in 30 seconds on the same printer. More measures for different printers and documents can be found at the end of this post. The issues is registered as  "JDK-4627340 : RFE: A way to improve text printing performance for postscript devices" (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4627340) and the proposed workaround is to use printer fonts.
    Side remark regarding the workaround
    There is a regression that prevents the workaround from working (bug 9008662 at Sun (not yet visible),  bug 8023990 at OpenJDK (https://bugs.openjdk.java.net/browse/JDK-8023990). Without knowing what other bad side effects this might have, the issue can be resolved by setting the property "sun.awt.fontconfig". On my system I set it to the location of a "fontconfig.properties" of a JVM that does not have the bug (e.g. /home/alex/openjdk_7_b147_jun_11/openjdk/build/linux-i586/bin/java -Dsun.awt.fontconfig="/etc/java-6-openjdk/fontconfig.properties" Print2DtoStream). I also successfully tested the workaround on an Oracle JVM 1.7.0_03-b04.
    Back to the main topic
    How the JVM draws text if it can't use a standard printer font
    Text is drawn with postscript path drawning commands such as "moveto", "lineto" or "curveto". As an example consider the word "ll" which looks something like this:
    %N->short for "newpath"
    N
    %paint first "l"
    %M->short for "moveto"
    0.76875 11.06 M
    %L->short for "lineto"
    0.76875 2.468 L
    1.823 2.468 L
    1.823 11.06 L
    0.76875 11.06 L
    %p->short for "closepath"
    P
    %paint second "l"
    3.649 11.06 M
    3.649 2.468 L
    4.703 2.468 L
    4.703 11.06 L
    3.649 11.06 L
    P
    The same text could be printed with a printer font using the command "(ll) show" which is much more compact but is available in Java only for the Postscript standard fonts and it isn't working at all right now as explained above.
    Is it the file size?
    My first thought was that the file size was the source of of slowness and so I wrote a small processor that would detect glyphs, normalize*1 them and place them in a dictionary. Recurring references to the same glyph were replaced by a dictionary reference  (This is incidentally the fix proposed by the original author of RFE 4627340). This shrunk the file to about 11% of the original size but the processing time surprisingly doubled.
    *1: With "normalizing" I mean applying a translation transform so that the smallest coordinates in the contours of a glyph are exactly 0. In addition I experimented with performing a normalizing scale transform so that all coordinates lie between 0 and 1 so that identical glyphs are detected at arbitrary positions and at different font sizes.
    That led to the question to why there is such a big difference in performance between a Type 1 font dictionary and a self constructed dictionary since both contain basically the same drawing instructions. The difference is apparently that fonts are cached and user drawings are not unless explicitly told.
    The Postscript "ucache" instruction
    Postscript level 2 introduces the "ucache" instruction which seems to be defined for precisely this kind of problem. From the documentation:
    "Some PostScript programs define paths that are repeated many times. To optimize the interpretation of such paths, the PostScript language provides a facility called the user path cache. This cache, analogous to the font cache, retains the results from previously interpreted user path definitions. When the PostScript interpreter encounters a user path that is already in the cache, it substitutes the cached results instead of reinterpreting the path definition. "
    After adding "ucache" instructions to my filter the speed improved by factor 10.
    To illustrate the said the "ll" text from above looked as follows after the transformation:
    %definition of the glyph "l" named "p0"
    /p0
    ucache
    0.000 0.000 1.054 8.592 setbbox
    0.000 8.592 moveto
    0.000 0.000 lineto
    1.054 0.000 lineto
    1.054 8.592 lineto
    0.000 8.592 lineto
    closepath
    } cvlit def
    G
    N
    0.769 2.468 translate
    %draw "l" at 0.769 2.468
    p0 ufill
    -0.769 -2.468 translate
    3.649 2.468 translate
    %draw "l" at 3.649 2.468
    p0 ufill
    -3.649 -2.468 translate
    For ucached shapes there is a special compact representation so that the same can be written as follows:
    /p0
    0.000 0.000 1.054 8.592
    0.000 8.592
    0.000 0.000
    1.054 0.000
    1.054 8.592
    0.000 8.592
    } cvlit def
    G
    N
    0.769 2.468 translate
    p0 ufill
    -0.769 -2.468 translate
    3.649 2.468 translate
    p0 ufill
    -3.649 -2.468 translate
    Interestingly the speed improvement remained the same on a Chinese report that had hardly any character reuse. Upon this observation I changed the filter to not use a dictionary but so simply instruct the interpreter to cache each glyph definition and the performance remained nearly the same.
    The initial "ll" text from above looks as follows after this transformation:
    N
    %paint first "l" cached
    0.76875 2.468 1.823 11.06
    0.76875 11.06
    0.76875 2.468
    1.823 2.468
    1.823 11.06
    0.76875 11.06
    } ufill
    %paint second  "l" cached
    3.649 2.468 4.703 11.06
    3.649 11.06
    3.649 2.468
    4.703 2.468
    4.703 11.06
    3.649 11.06
    } ufill
    Note that I didn't normalize the shapes.
    Why does this improve the performance so vastly if the shape is drawn only once? For a while I thought perhaps that the interpreter would consider two paths which differ only by a translation as being the same but rereading the documentation and looking at the Chinese example in which nearly all characters are unique, disproves this. The relevant part of the documentation reads:
    "Caching is based on the value of a user path object. That is, two user paths are considered the same for caching purposes if all of their corresponding elements are equal, even if the objects themselves are not.
    A user path placed in the cache need not be explicitly retained in virtual memory. An equivalent user path appearing literally later in the program can take advantage of the cached information. Of course, if it is known that a given user path will be used many times, defining it explicitly in VM avoids creating it multiple times.
    User path caching, like font caching, is effective across translations of the user coordinate system, but not across other transformations, such as scaling or rotation. In other words, multiple instances of a given user path painted at different places on the page will take advantage of the user path cache when the current transformation matrix has been altered only by translate. If the CTM has been altered by scale or rotate , the instances will be treated as if they were described by different user paths."
    An explanation that would fit the findings
    The rasterizer renders the page multiple time (perhaps in order to save memory and produce horizontal strips). On the first rendering the cache is filled and reused on the subsequent renderings thereby improving performance even if all cached items are used only once.
    Based upon this theory I hoped that the strip height would grow if I added more memory to the printer but this was not the case on the two printers for which I had memory to test with. Even substantial changes to the available memory (e.g. going from 32 MB to 96 MB) had no impact whatsoever on the performance.
    Summary
    The issue is not related to the file size as the original requester suspected but very likely due to the uncached rendering. Caching of glyphs can be achieved by using the "ucache" instruction or perhaps by placing the glyphs in font dictionaries and using the "show" operator.
    Although reported in 2003, time is apparently not healing this quick enough since printers in the 10,000$ class like the Sharp MX2310U still take a full minute to print 10 pages and a desktop printer may be blocked for over an hour for the same document.
    We will now try to use the CUPS filter and leave the printers configured as Postscript printers. If there is interest I can post the single file source of a CUPS filter that performs the inline conversion described. Apart from libl it requires no additional libraries and written using flex it is reasonably lightweight and fast.
    I would appreciate any opinion on whether or not the proposed workaround for bug 8023990 (https://bugs.openjdk.java.net/browse/JDK-8023990), namely having the system property "sun.awt.fontconfig" pointing to a working fontconfig.properties of a previously installed and working 1.6 version file, is safe.
    Measures (Appendix)
    "Terms and Conditions" report
    Testing a single page "Terms and Conditions" report in "Arial" 8pt (I am aware that "Helvetica" is width compatible and nearly looks the same but in this particular case the line height was also relevant and as explained above, printer fonts are currently not working). The page contains 17000 characters of which some parts are bold and some italic. This is a real world example and to make things worse the requirement is to print the text on the backside of every page on a certain class of reports. I am aware that this is a bit extreme but I also felt that I couldn't dismiss it as being unreasonable.
    File "Arial.ps" (7.5 MB Unmodified output of the JVM)
    Printer
    Printing time
    Dell 2330dn 32MB/96MB
    3:50 minutes
    Lexmark X658de (55 ppm, aprox. 5,000$)
      1:45 minutes
    HP LaserJet 4240n 64 MB
    1:12 minutes
    Kyocera Taskalfa 300ci (30 PPM, aprox. 8,000$)
    1 minute
    HP Color LaserJet 4650 dn 128/384MB
    51 seconds
    Sharp MX 2310U 512MB (55ppm,  aprox. 10,000$)
    31 seconds
    Arial_inline.ps (8 MB contains "ucache" without normalization and without dictionary)
    Printer
    Printing time
    32MB/96MB
    30seconds/30seconds (Improvement by factor 7.7)
    Lexmark X658de (55 ppm, aprox. 5,000$)
      15 seconds (Improvement by factor 7)
    HP LaserJet 4240n 64 MB
    47 seconds (Improvement by factor 1.5)
    Kyocera Taskalfa 300ci (30 PPM, aprox. 8,000$)
    20 seconds (Improvement by factor 5)
    HP Color LaserJet 4650 dn 128/384MB
    46 seconds (Improvement by factor 1.1)
    Sharp MX 2310U 512MB (55ppm,  aprox. 10,000$)
    14 seconds (Improvement by factor 2)
    Asian characters test
    Testing 10 pages of Asian characters in the font "WenQuanYi Zen Hei" 12pt where each page contains 49 lines by 40 unique characters. The document contains the 30,000 characters between unicode 0x4e00 and 0x9fff. This is a nonsense stress test but it illustrates  that the "ucache" speedup works even though no character is repeated in the report.
    Asian.ps  (52 MB Unmodified output of the JVM)
    Printer
    Printing time
    Dell 2330dn 32MB/96MB
    64 minutes
    Lexmark X658de (55 ppm, aprox. 5,000$)
    Not measured
    HP LaserJet 4240n 64 MB
    11 minutes
    Kyocera Taskalfa 300ci (30 PPM, aprox. 8,000$)
    Not measured
    HP Color LaserJet 4650 dn 128/384MB
    9:13 minutes
    Sharp MX 2310U 512MB (55ppm,  aprox. 10,000$)
    4:08 minutes
    Asian_inline.ps (54 MB contains "ucache" without normalization and without dictionary)
    Printer
    Printing time
    32MB/96MB
    5:30 minutes (Improvement by factor 11.6)
    Lexmark X658de (55 ppm, aprox. 5,000$)
    Not measured
    HP LaserJet 4240n 64 MB
    3:48 minutes (Improvement by factor 2.9)
    Kyocera Taskalfa 300ci (30 PPM, aprox. 8,000$)
    Not measured
    HP Color LaserJet 4650 dn 128/384MB
    2:46 minutes (Improvement by factor 3.4)
    Sharp MX 2310U 512MB (55ppm,  aprox. 10,000$)
    48 seconds (Improvement by factor 5)

    Hi Sven,
    Will putting the boilerplate in the trailer section allow me to still have it appearing on the back page of the main report? This is where it needs to be as far as the printed report goes - it is duplexed.
    Regards
    Lanny

  • Static class garbage collection

    Can garbage collector can garbage collect static classes ?.
    My doubt is that when you access a static class , that class is loaded through its class loader ( when first time that class is referenced ).
    So when did the garbage collector collects this static class ( assume that static class no longer referred ).
    Please do more information,
    What are the ways to prevent garbage collector for a particular class ( Assume that i m implementing a singleton for my java runtime)
    thanks and regards
    Renjith.

    Can garbage collector can garbage collect static classes ?. Static classes are nothing special in terms of class loading - they are only different in visibility for linking.
    Perhaps you mean static members of classes?
    My doubt is that when you access a static class ,
    that class is loaded through its class loader ( when
    first time that class is referenced ). Classes are always loaded through classloaders. Objects of those classes are allocated from the heap, and the object instances refer to the class object.
    Objects (either instances, or classes themselves) are garbage collected when they are no longer live (i.e. no live object refers to them). (This is a somewhat recursive definition, and sometimes, you can have cyclic dependencies that make garbage collection tricky, but the GC, while it has to be conservative for correctness, usually gets it right).
    So for a static member to be garbage-collected, the class has to be garbage-collected first. The class cannot be GC'ed until all references to it go away (this includes all dynamically allocated objects of that type, and the class loader that loaded that class).
    And yes, class loaders can go away, but only if they are created by your program. The system class loader (which is the default classloader you get if you don't create any class loaders of your own) never goes away, so any class loaded from CLASSPATH will never be unloaded.
    (As an example, servlet containers - e.g. Tomcat, Weblogic, etc.) allocate one or more classloaders for each webapp. When the webapp is un-deployed, the classloaders are "orphaned", and they, and any classes loaded by them (from the WEB-INF/lib and WEB-INF/classes directories) are unloaded and garbage-collected. (After all the dynamic objects of those classes are GC'ed, of course).
    >
    So when did the garbage collector collects this
    static class ( assume that static class no longer
    referred ).
    Please do more information,
    What are the ways to prevent garbage collector for a
    particular class ( Assume that i m implementing a
    singleton for my java runtime)
    thanks and regards
    Renjith.

Maybe you are looking for

  • Mac Book Connectivity with TV

    I used th Mini DVI-VGA adaptor, connected computer to TV. My desktop picture and the Dock appear on the TV screen, the mouse I see on my TV screen, but when I click on an application (iMOVIE) it does not open. I had to disconnect the computer from th

  • Consuming Confirmed STR based on STO

    Hi Experts, Due to some difficulties, I am deviating from the SAP standard. I am doing SNP planning based on Heuristics tool. In my scenario, a Stock Transfer Order is created based on the completion of a production order. STO is created in reference

  • Check Deposit query

    Hi, If i deposit a check in Bank entry may be Dr SBI a/c Cr Cash a/c How can i know that the check has been cleared in bank. URGENT pls Rgds sunfico

  • Does there be any change in the dimensions of the project when published in a web browser ?

    Hello all. I am facing a problem with the dimensions of my project. I need my published project in the web browser must fit in the window without any scrolling. I started my project with the dimensions 1024*540. when I tested it at the initial stage

  • Runtime error in Catalog access

    Hi, I've got a problem creating JSP render presentation. In my JDevloper enviroment everything is right, I pass the database and the catalog connection test and I see the presentation but, when I try to see it in web application... it doesn´t work.